dfs, bfs之邻接表无向图实验
来源:互联网 发布:截动态图软件 编辑:程序博客网 时间:2024/05/29 08:05
dfs, bfs之邻接表无向图实验
标签:dfs bfs
#include <stdio.h>#include <stdlib.h>#include <queue>using namespace std;#define M 20 //预定义图的最大顶点数int visited[M];typedef char DataType; //顶点信息数据类型typedef struct node{ //边表结点 int adjvex; struct node *next;}EdgeNode;typedef struct vnode{ //头结点 DataType vertex; EdgeNode *FirstEdge;}VertexNode;typedef struct{ //邻接表类型 VertexNode adjlist[M]; //存放头结点的顺序表 int n, e; //图的顶点数与边数}LinkedGraph;void creat(LinkedGraph *g){ freopen("g11.txt", "r", stdin); EdgeNode *s; scanf("%d %d", &g->n, &g->e); for(int i = 0; i < g->n; i++){ scanf("%1s", &g->adjlist[i].vertex); //读入顶点信息 g->adjlist[i].FirstEdge = NULL; //边表置为空表 } for(int k = 0; k < g->e; k++){ //循环e次建立边表 int i, j; scanf("%d %d",&i,&j); s = (EdgeNode *)malloc(sizeof(EdgeNode)); s->adjvex = j; //邻接点序号为j s->next = g->adjlist[i].FirstEdge; g->adjlist[i].FirstEdge = s; //将新结点*s插入顶点vi的边表头部 s = (EdgeNode *)malloc(sizeof(EdgeNode)); //无向图 s->adjvex = i; //邻接点序号为i s->next = g->adjlist[j].FirstEdge; g->adjlist[j].FirstEdge = s; //将新结点*s插入顶点vj的边表头部 }}void print(LinkedGraph g){ for(int i = 0; i < g.n; i++){ printf("%c", g.adjlist[i].vertex); EdgeNode *p = g.adjlist[i].FirstEdge; while(p){ printf("-->%d", p->adjvex); p = p->next; } printf("\n"); }}void dfs(LinkedGraph g,int i){ visited[i] = 1; printf("%c", g.adjlist[i].vertex); for(EdgeNode *p = g.adjlist[i].FirstEdge; p; p = p->next) if(!visited[p->adjvex]) dfs(g, p->adjvex);}void DfsTraverse(LinkedGraph g){ for(int i = 0; i < g.n; i++) visited[i] = 0; for(int i = 0; i < g.n; i++) if(!visited[i]) dfs(g, i);}queue <int> q;void bfs(LinkedGraph g, int i){ visited[i] = 1; printf("%c", g.adjlist[i].vertex); q.push(i); while(!q.empty()){ EdgeNode *u = g.adjlist[q.front()].FirstEdge; q.pop(); for(EdgeNode *p = u; p; p = p->next) if(!visited[p->adjvex]){ visited[p->adjvex] = 1; printf("%d", p->adjvex); q.push(p->adjvex); } }}void BfsTraverse(LinkedGraph g){ for(int i = 0; i < g.n; i++) visited[i] = 0; for(int i = 0; i < g.n; i++) if(!visited[i]) bfs(g, i);}int main(){ LinkedGraph g; creat(&g); printf("The graph is:\n"); print(g); printf("\n"); DfsTraverse(g); printf("\n"); BfsTraverse(g); printf("\n"); return 0;}
数据文件
输出结果
阅读全文
0 0
- dfs, bfs之邻接表无向图实验
- dfs, bfs之邻接矩阵无向图
- 数据结构之无向图邻接表DFS之查询遍历关节点
- 数据结构之无向图邻接表DFS之创建打印生成森林(整理严蔚敏数据结构)
- 数据结构之无向图邻接表DFS之查询遍历关节点(参考整理严蔚敏数据结构)
- 基于邻接矩阵和邻接表的两种方法实现无向图的BFS和DFS
- 无向图邻接表的深度优先遍历(DFS)
- 邻接表无向图的创建和遍历(dfs)
- 数据结构之无向图的邻接表DFS(参考C博客—研究毛)
- 邻接表无向图
- 无向图创建+BFS+DFS(整合)
- 邻接表无向图(一)之 C语言详解
- 邻接表无向图之 C语言详解
- 邻接表无向图 之 Java详解
- 无向图关键点(dfs邻接阵),割点
- 用邻接表存储有向图实现的dfs和bfs
- DFS BFS遍历图 邻接表实现
- java实现邻接表图、DFS、BFS
- SQL总结
- Kubernetes安装之证书验证
- 新人报到
- 对象的一些方法
- POJ
- dfs, bfs之邻接表无向图实验
- 向阿里巴巴学习11个挣大钱的小心机
- 过河卒
- 线程池使用
- 日常开发中linux中最常用的100条命令
- 82C55芯片概览
- Android——RecyclerView——Recycler类全部源码翻译及注释
- nfs无法挂载:Loading: *** ERROR: Cannot mount
- ES记录