数据结构课程设计,有向图,C语言高手进

对任意给定的有向图(顶点数不小于20,边数不少于30),能够输入图的顶点和边(或弧)的信息,并存储到邻接矩阵结构对自己所创建的图完成以下操作:
1、对无向图求每个顶点的度,或对有向图求每个顶点的入度和出度
2、完成插入顶点和边的功能
3、完成删除顶点和边的功能
4、把邻接矩阵转换成十字链表存储结构
可以的话请发送到我的邮箱qinyang3636@163.com,能较好的运行追加分数!谢谢!!

写C程序,随机给出n*n的邻接矩阵,并打印输出邻接矩阵,以及有向图的边的个数,每个顶点的度,并判断该图中是否存在Euler回路: (1)如果为n阶,则随机产生一个n*n的邻接矩阵; (2)输出邻接矩阵,边的个数,每个顶点的度以及图中是否存在Euler回路。 这个题目涉及到了两个主要的知识点,一个是数据结构中的有向图的邻接矩阵的创建,还有就是离散数学中的Euler回路的判定定理。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define n 5 //定义矩阵的阶数n
typedef int ver;
typedef int edg; //定义有向图的顶点和边值为整形
typedef struct{
ver v[n]; //顶点
edg e[n][n]; //边权
}graph; //定义邻接矩阵的数据结构

void printgraph (graph G) //打印输出邻接矩阵
{
int i,j;
printf("顶点");
for(i=0;i<n;i++)
printf("%3d",i);
printf("\n");
for(i=0;i<n;i++)
{
printf("%4d",i);
for(j=0;j<n;j++)
printf("%3d",G.e[i][j]);
printf("\n");
}
}

void countD (graph G) //判断有向图的顶点的度,并判断Euler回路
{
int i,j,l;
int e=0,count=0;
int k; //计数器赋0
int c[n],d[n];
for (i=0;i<n;i++){
c[i]=0;
for (j=0;j<n;j++){
if (G.e[i][j]!=0)
c[i]=c[i]+1;
}
printf("顶点 %d 的出度为: %d \n",i,c[i]); //有向图的任意顶点i的出度为邻接矩阵中第i行不为0的数的个数
}
printf("\n");
for (j=0;j<n;j++){
d[j]=0;
for (i=0;i<n;i++){
if (G.e[i][j]!=0)
d[j]=d[j]+1;
}
printf("顶点 %d 的入度为: %d \n",j,d[j]); //有向图的任意顶点j的入度为邻接矩阵中第j列不为0的数的个数
}
for (l=0;l<n;l++){
if (c[l]==d[l])
count++;
else {
if (c[l]-d[l]==1)
e++;
else{
if (d[l]-c[l]==1)
e++;
}
}
}
k=0;
if (count==n) //判断Euler回路: 1:所有顶点的出度等于入度;
//2:有且仅有两个点度数为奇数,且一个出度比入度大一
k=1; //另一个入度比出度大一,其他的顶点出度等于入度

else {
if (e==2 && count==n-2)

k=1;
}

if (k==1)
printf("有向图中存在Euler回路\n");
else
printf("有向图中不存在Euler回路\n");

}

void main() //主函数
{
int i,j,temp;

graph G;

srand(time (NULL)); //随机种子

for (i=0;i<n;i++){
for (j=0;j<n;j++)
G.e[i][j]=0;
}
for (i=0;i<n;i++)
G.v[i]=0;

for (i=0;i<n;i++){
for (j=0;j<n;j++){
do
{
temp = rand()%n; //随机建造邻接矩阵
if (G.v[i]<n)
{
G.e[i][j] = temp;
G.v[i]++;
break;
}
}
while (1);
}
}
printf("生成的有向图邻接矩阵为: \n");
printgraph(G);
countD (G); //调用子函数
printf("有向图的边数为:%d\n",n*(n-1)/2);

}
温馨提示:内容为网友见解,仅供参考
无其他回答

数据结构课程设计,有向图,C语言高手进
include <stdlib.h> include <stdio.h> include <conio.h> struct node \/* 图顶点结构定义 *\/ { int vertex; \/* 顶点数据信息 *\/ struct node *nextnode; \/* 指下一顶点的指标 *\/ };typedef struct node *graph; \/* 图形的结构新型态 *\/ struct node head[9]; \/* 图形顶点数组 更改...

急!!!c语言高手进!
第一个很简单,就是实现数组的移动而已 也就是任意位置后面的数据前移一个位置或者后移一个位置的算法 这个就是循环而已 这个两个方式,一个是在原来的基础上做 插入的话,从数组后面开始循环后移,直到插入的地方插入 删除直接冲那个位置用后面的数据覆盖即可 第二个是用新的数组,复制的插入位置,插...

急!!!数据结构课程设计
对任意给定的图(顶点数不小于20,边数不少于30,图的类型可以是有向图、无向图、有向网、无向网),能够输入图的顶点和边(或弧)的信息,并存储到相应存储结构(邻接矩阵、邻接表、十字链表、邻接多重表,任选其中两种类型),对自己所创建的图完成以下操作:1、 对无向图求每个顶点的度,或对有向图求每个顶点的入度...

数据结构(C语言版),求高手解决。。
1.二叉树是度为2的有序树( )【答案】× 2.完全二叉树一定存在度为1的结点( )【答案】× 3.深度为K的二叉树中结点总数≤2k-1( )【答案】√ 4.由一棵二叉树的先序序列和后序序列可以惟一确定它( )【答案】× 5.完全二叉树中,若一个结点没有左孩子,则它必是树叶...

数据结构 课程设计C语言版 本人现..跪求一道课程设计答案 有哪..位的...
printf("not found\\n"); \/*没有找到*\/ return NULL; \/*返回为空指针*\/} 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 其他类似问题 2019-01-11 跪求数据结构课程设计(C语言版)代码,感激不尽 2012-12-27 急求求大仙帮忙!C语言数据结构课程设计,关于旅游图。 1 2011-12-06 求c语言数据结...

...要继续学数据结构,请问是数据结构有没有C语言难学
我现在正在学习数据结构,比起C语言当然要难一些,不过它是以C语言作为基础的,它可以引导你把C程序编的更有水平,是相当重要的一门课程,但它比C语言更容易入门,如果你以前学过离散数学,那学习数据结构就更相对容易多了.

C语言高手进………
void display(NODE *head) \/\/ 输出数据 { for( NODE *p = head; p != NULL; p = p->next)printf("%d ",p->data); \/\/ 这里 %d 后面有两个空格 printf("\\n");} void sort2(NODE *head) \/\/ 由小到大排序 { int t;for(NODE *p = head;p != NULL; p = p->...

刚看完c语言,现在看数据结构感觉好难看不懂,请教高手指点!
慢慢培养自己的程序思维。其实initsack这样的函数 当你培养了一定的写代码能力,这些源代码也可以自己写的。同时在C++的STL库存在着类似线性表,串等类型,里面包含了类似像inistack的函数,可以直接调用。开始看的时候,这些函数可以想抽象点,先不管他怎么实现,先了解其函数作用及表面的算法思路即可。

c语言高手进来!! c语言,“算法”的学习方法归纳下。谢了
推荐书籍《数据结构》(C语言版)严蔚敏著。没有什么捷径,多看书,多思考,最后也是最关键的多练习,将书上的算法一一实现。数学其实不是关键,当然也不是没有关系,关键是要多思考多练习!

数据结构c语言版很难吗,应该怎么学好啊,c语言也没有学好,现在学数据结 ...
数据结构大部分都是在讲算法的, 那个东西入不了门的人真的理解起来超级困难 C语言起到的作用是课程中的伪代码表示, 在一个就是后边算法的实现 即使学的不好, 只要能看懂, 也没啥太大问题, 只不过你后面在实际实现的时候(比如课程设计之类的)就做不了了 ...

相似回答