(编程训练)再回首,数据结构——无向图的邻接矩阵表示、DFS、BFS
来源:互联网 发布:网络红本价 编辑:程序博客网 时间:2024/05/16 08:04
最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
希望这些能提供给初学者一些参考。
在VC++6.0下可运行,当初还写了不少注释。
【问题描述】
建立图的邻接矩阵存储结构,实现图的遍历
【基本要求】
·功能:建立图的邻接矩阵存储结构,实现图的BFS、DFS
·输入:输入连通图的顶点数、顶点信息、边数、顶点对序列及遍历的起始顶点序号
·输出:图的广度优先搜索序列、深度优先搜索
【模块划分】
1. 建立有向图的邻接表 CreateAdjMatrix()
2. 以邻接表作为存储结构实现深度优先搜索DFS()
3. 循环队列的初始化 InitQueue()
4. 判断循环队列是否为空 QueueEmpty()
5. 入队 EnQueue()
6. 出对 DeleteQueue()
7. 以邻接表作为存储结构实现广度优先搜索BFS()
8. main()函数调用 CreateAdjMatrix()形成有向图的邻接矩阵,调用函数DFS() 求得深度优先搜索序列,调用函数BFS()求得广度优先搜索序列
#include <stdio.h>#include <string.h>#define MaxSize 10/*邻接矩阵的数据结构*/typedef struct{char vexs[MaxSize];//顶点数组int arcs[MaxSize][MaxSize];//邻接矩阵int vexnum,arcnum;//顶点数、边弧数}AdjMatrix;/*队列的数据结构*/typedef struct{int elem[MaxSize];int front,rear;}CirQueue;int visited[MaxSize];//标志_是否访问过/*建立无向图的邻接矩阵 Create AdjMatrix()*/void CreateAdjMatrix(AdjMatrix *g){int i,j,k;printf("输入顶点数、边弧数\n");scanf("%d%d",&g->vexnum,&g->arcnum);getchar();printf("输入顶点值\n");for(i=0;i<g->vexnum;i++)scanf("%c",&g->vexs[i]);getchar();//初始化无向图for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)g->arcs[i][j]=0;printf("输入边弧值\n");for(i=0;i<g->arcnum;i++){scanf("%d%d",&j,&k);getchar();g->arcs[j][k]=1;g->arcs[k][j]=1;}}/*邻接矩阵实现 DFS()*/void DFS(AdjMatrix *g, int i){visited[i]=1;printf("%3c ",g->vexs[i]);for(int j=0;j<g->vexnum;j++)if(g->arcs[i][j] && (!visited[j]))DFS(g,j);}/*入队列 EnQueue()*/void EnQueue(CirQueue *q, int e){if(q->front==(q->rear+1)%MaxSize)printf("Full!");else{q->rear=(q->rear+1)%MaxSize;q->elem[q->rear]=e;}}/*出队列 DeleteQueue()*/void DeleteQueue(CirQueue *q, int *e){if(q->front==q->rear)return;*e=q->elem[(q->front+1)%MaxSize];q->front=(q->front+1)%MaxSize;}/*邻接矩阵实现 BFS()*/void BFS(AdjMatrix *g, int i){int j,k;CirQueue Q;memset(visited,0,sizeof(visited));printf("%3c ",g->vexs[i]);visited[i]=1; Q.front=0;Q.rear=0;EnQueue(&Q,i);while(!(Q.front==Q.rear)){DeleteQueue(&Q,&j);for(k=0;k<g->vexnum;k++)if(g->arcs[j][k]&&(!visited[k])){printf("%3c ",g->vexs[k]);visited[k]=1;EnQueue(&Q,k);}}}/*主函数 main*/int main(){AdjMatrix *g, a;char ch,c;int i,j;g=&a;printf("建立无向图的邻接矩阵\n");CreateAdjMatrix(g);printf("无向图的邻接矩阵为\n");for(i=0;i<g->vexnum;i++){for(j=0;j<g->vexnum;j++)printf("%4d",g->arcs[i][j]);printf("\n");}printf("深度优先搜索\n");memset(visited,0,sizeof(visited));DFS(g,0);printf("\n");printf("广度优先搜索\n");BFS(g,0);printf("\n");}
1 0
- (编程训练)再回首,数据结构——无向图的邻接矩阵表示、DFS、BFS
- dfs, bfs之邻接矩阵无向图
- 【数据结构类】无向图的邻接矩阵表示法
- 邻接矩阵遍历(无向图,邻接矩阵,DFS,BFS)
- 图的邻接矩阵表示(DFS,BFS)
- (编程训练)再回首,数据结构——二叉排序树的建立
- 无向图的邻接矩阵创建表示
- 有向图的邻接矩阵表示法(创建,DFS,BFS)
- 数据结构 邻接矩阵的BFS DFS
- 邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
- (编程训练)再回首,数据结构——顺序表上的编程训练
- (编程训练)再回首,数据结构——链表上的编程训练_实现多项式运算
- 图的邻接矩阵c语言表示(无向网)---《数据结构》算法7.2
- 图的邻接矩阵表示 DFS 和BFS C++实现
- (编程训练)再回首,数据结构——字符串操作
- 再回首,数据结构——图的常用术语,邻接矩阵、邻接表存储结构
- 有向图的DFS和BFS(邻接矩阵实现)
- 判断无向图图的连通性,邻接矩阵表示
- 阜宁身份证号码户籍地址信息查询
- 快速排序javascript
- (编程训练)再回首,数据结构——哈夫曼编码的实现
- sqlite3命令大全
- iOS开发—Quartz2D简单使用(一)
- (编程训练)再回首,数据结构——无向图的邻接矩阵表示、DFS、BFS
- Sublime Text 3 写js智能提示插件
- (编程训练)再回首,数据结构——二叉排序树的建立
- 新SAT数学样题及答案Question18
- GRE填空考查考生哪些能力
- Highcharts动态取值,刷新数据的解决方案
- 延时加载技术-----仿照手机淘宝网站图片延时加载
- 射阳在逃犯罪人员信息记录查询
- eclipse中把多个项目放在一个work set下