博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dfs, bfs之邻接表无向图实验
阅读量:4156 次
发布时间:2019-05-26

本文共 2562 字,大约阅读时间需要 8 分钟。

dfs, bfs之邻接表无向图实验

标签:dfs bfs


#include 
#include
#include
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
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;}

数据文件

file
输出结果
graph

你可能感兴趣的文章
推荐使用percona版mysql
查看>>
大文件重定向和管道的效率对比
查看>>
Tair ldb(leveldb存储引擎)实现介绍
查看>>
通过apache/nginx禁止访问.svn目录
查看>>
C++性能优化技术导论
查看>>
SQL-92定义的errorcode 通过PDO什么的返回的值~
查看>>
linux 终端控制 颜色/位置 man console_codes
查看>>
深入了解php底层机制
查看>>
打开general_log 记录所有的sql
查看>>
原来打补丁是这么玩儿。。。diff patch
查看>>
51cto 均衡负载专题 收藏
查看>>
为什么程序员的社会地位不高?
查看>>
Binary_search_tree from wikipedia
查看>>
给你的Linux系统上点stress
查看>>
学了学shell,钻个牛角尖,根据接口文档生成配置数组...awk sed xargs
查看>>
给wordpress加个特色头像
查看>>
BitMap初探
查看>>
Google Reader快捷键
查看>>
由12306.cn谈谈网站性能技术
查看>>
MySQL DELAY_KEY_WRITE
查看>>