数据结构7-关于“图”的生成与操作的实例
来源:互联网 发布:网络抓包原理 编辑:程序博客网 时间:2024/05/20 23:02
程序实现用邻接表存储的形式创建一棵无向图,应用深度优先搜索的方法遍历图中各点,并打印出数据,代码如下所示:
#include"stdio.h"typedef struct ArcNode{/*单链表中的结点的类型*/int adjvex; /*该边指向的顶点在顺序表中的位置*/struct ArcNode *next; /*下一条边*/}ArcNode;typedef struct VNode{/*顶点类型*/int data; /*顶点中的数据信息*/ArcNode *firstarc; /*指向单链表,即指向第一条边*/}VNode;int visited[5]={0,0,0,0,0};CreatGraph(int n,VNode G[]){int i,e;ArcNode *p,*q;printf("Input the information of the vertex\n");for(i=0;i<n;i++){scanf("%d",&G[i]);G[i].firstarc = NULL; /*初始化第一条边为空*/}for(i=0;i<n;i++){printf("Creat the edges for the %dth vertex\n",i);scanf("%d",&e);while(e!=-1){p = (ArcNode *)malloc(sizeof(ArcNode)); /*创建一条边*/p->next = NULL;p->adjvex = e;if(G[i].firstarc == NULL)G[i].firstarc = p; /*i结点的第一条边*/elseq->next = p; /*下一条边*/q = p;scanf("%d",&e);}}}int FirstAdj(VNode G[],int v){if(G[v].firstarc != NULL)return (G[v].firstarc)->adjvex;return -1;}int NextAdj(VNode G[],int v){ArcNode *p;p=G[v].firstarc;while(p!=NULL){if(visited[p->adjvex])p=p->next;elsereturn p->adjvex;}return -1;}void DFS(VNode G[],int v){int w;printf("%d ",G[v]); /*访问当前顶点,打印出该顶点中的数据信息*/visited[v]=1; /*将顶点v对应的访问标记置1*/w=FirstAdj(G,v); /*找到顶点v的第一个邻接点,如果无邻接点,返回-1*/while(w != -1){if(visited[w] == 0) /*该顶点未被访问*/DFS(G,w); /*递归地进行深度优先搜索*/w = NextAdj(G,v); /*找到顶点v的下一个邻接点,如果无邻接点,返回-1*/}}main(){VNode G[5];CreatGraph(5,G);DFS(G,0);getche();}
0 0
- 数据结构7-关于“图”的生成与操作的实例
- 数据结构6-关于“树”的生成与操作的实例
- 数据结构2-动态生成顺序表的实例与分析
- 数据结构3-链表生成的实例与分析
- 数据结构9-关于折半查找的实例
- 关于数据库与实例的一张图
- 关于d3生成图片的一些实例
- Sql Server关于数据结构的操作
- 数据结构关于二叉树的操作
- 关于Qt5.7生成应用程序图标的操作
- 静态页生成的类与实例!!
- .net 数据结构与算法基础:图的操作
- 算法与数据结构--图的实现、基本操作及应用
- 数据结构之 单链表的实现与操作
- 数据结构之 队列的操作与实现
- 数据结构与算法 链表的操作
- 数据结构-5 堆的定义与操作
- 数据结构 && 实验7 && 图的操作
- JAVA的人民币大写(金额)转化
- Shell编程入门(第二版)(下)
- 【CodeForces】Round #270 A,B,C,D题解
- Effective C++ 条款 51:编写new和delete时需固守常规
- Java框架数据库连接池比较(c3p0,dbcp和proxool)
- 数据结构7-关于“图”的生成与操作的实例
- Spring bean配置读取配置文件
- 80X86寻址方式总结
- 数组为什么这么有用?
- LeetCode Gas Station
- HDU2093 字符串2种不错的读入思路
- OSX:设置用户默认浏览器
- expdp 导出多路径
- 正则表达式 & grep学习