设为首页 加入收藏

TOP

C语言数据结构与算法之深度、广度优先搜索(二)
2018-11-14 10:10:55 】 浏览:329
Tags:语言 数据结构 算法 深度 广度 优先 搜索
m=0; g->arcnum=0; i=0; printf("\n输入顶点序列(以#结束):\n"); while ((v=getchar())!='#') { g->vexs[i]=v; /*读入顶点信息*/ i++; } g->vexnum=i; /*顶点数目*/ for (i=0;i<g->vexnum;i++) /*邻接矩阵初始化*/ for (j=0;j<g->vexnum;j++) g->arcs[i][j] = 0;/*(1)-邻接矩阵元素初始化为0*/ printf("\n输入边的信息(顶点序号,顶点序号),以(-1,-1)结束:\n"); scanf("%d,%d",&i,&j); /*读入边(i,j)*/ while (i!=-1) /*读入i为-1时结束*/ { g->arcs[i][j] = 1; /*(2)-i,j对应边等于1*/ g->arcnum++; scanf("%d,%d",&i,&j); } }/* createGraph */ /*(3)---从第i个顶点出发深度优先搜索,补充完整算法*/ void dfs(int i,graph *g) { int j; printf("%c", g->vexs[i]); visited[i] = TRUE; for (j = 0; j < g->vexnum; j++) if (g->arcs[i][j] == 1 && !visited[j]) dfs(j, g); }/* dfs */ /*深度优先搜索整个图*/ void tdfs(graph *g) { int i; printf("\n从顶点%C开始深度优先搜索序列:",g->vexs[0]); for (i=0;i<g->vexnum;i++) if (visited[i] != TRUE) /*(4)---对尚未访问过的顶点进行深度优先搜索*/ dfs(i,g); printf("\n"); }/*tdfs*/ /*从第k个顶点广度优先搜索*/ void bfs(int k,graph *g) { int i,j; queue qlist,*q; q=&qlist; q->rear=0; q->front=0; printf("%c",g->vexs[k]); visited[k]=TRUE; q->data[q->rear]=k; q->rear=(q->rear+1)%N; while (q->rear!=q->front) /*当队列不为空,进行搜索*/ { i=q->data[q->front]; q->front=(q->front+1)%N; for (j=0;j<g->vexnum;j++) if ((g->arcs[i][j]==1)&&(!visited[j])) { printf("%c",g->vexs[j]); visited[j]=TRUE; q->data[q->rear] = j; /*(5)---刚访问过的结点入队*/ q->rear = (q->rear + 1) % N; /*(6)---修改队尾指针*/ } } }/*bfs*/ /*广度优先搜索整个图*/ void tbfs(graph *g) { int i; printf("\n从顶点%C开始广度优先搜索序列:",g->vexs[0]); for (i=0;i<g->vexnum;i++) if (visited[i]!=TRUE) bfs(i,g); /*从顶点i开始广度优先搜索*/ printf("\n"); }/*tbfs*/ void init_visit() /*初始化访问标识数组*/ { int i; for (i=0;i<N;i++) visited[i]=FALSE; } int main() { graph ga; int i,j; printf("***********图邻接矩阵存储和图的遍历***********\n"); printf("\n1-输入图的基本信息:\n"); createGraph(&ga); printf("\n2-无向图的邻接矩阵:\n"); for (i=0;i<ga.vexnum;i++) { for (j=0;j<ga.vexnum;j++) printf("%3d",ga.arcs[i][j]); printf("\n"); } printf("\n3-图的遍历:\n"); init_visit(); /*初始化访问数组*/ tdfs(&ga); /*深度优先搜索图*/ init_visit(); tbfs(&ga); /*广度优先搜索图*/ return 0; }

运行结果(输入的为本节中一直用到的无向图)

 

深度和广度查找不同之处在于对顶点的访问顺序不同。

第一次写博客,应该还是有点问题的(虽然也查了一些资料~.~)

ball ball you can point my errors! thanks a  lot !

 

参考资料:

《数据结构(C语言版)》  严蔚敏 李冬梅 吴伟民著 人民邮电出版社

《程序设计中实用的数据结构 》  王建德 吴永辉著  人民邮电出版社

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言实现输出杨辉三角 下一篇【转载++】fopen返回0(空指针NUL..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目