邻接矩阵实现深度优先搜索,广度优先搜索
来源:互联网 发布:web api 数据库 编辑:程序博客网 时间:2024/06/04 19:16
#include<stdio.h>const int N=20;#define TRUE 1#define FALSE 0int visited[N];typedef struct /*队列的定义*/{ int data[N]; int front,rear;} queue;typedef struct /*图的邻接矩阵*/{ int vexnum,arcnum; char vexs[N]; int arcs[N][N];} graph;void createGraph(graph *g); /*建立一个无向图的邻接矩阵*/void dfs(int i,graph *g); /*从第i个顶点出发深度优先搜索*/void tdfs(graph *g); /*深度优先搜索整个图*/void bfs(int k,graph *g); /*从第k个顶点广度优先搜索*/void tbfs(graph *g); /*广度优先搜索整个图*/void init_visit(); /*初始化访问标识数组*/void createGraph(graph *g) /*建立一个无向图的邻接矩阵*/{ int i,j; char v; g->vexnum=0; g->arcnum=0; i=0; printf("输入顶点序列(以#结束):\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; printf("输入边的信息:\n"); scanf("%d,%d",&i,&j); /*读入边i,j*/ while(i!=-1) /*读入i,j为-1时结束*/ { g->arcs[i][j]=1; g->arcs[j][i]=1; scanf("%d,%d",&i,&j); }}void dfs(int i,graph *g) /*从第i个顶点出发深度优先搜索*/{ 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); }}void tdfs(graph *g) /*深度优先搜索整个图*/{ int i; printf("\n从顶点%C开始深度优先搜索序列:",g->vexs[0]); for(i=0; i<g->vexnum; i++) visited[i]=FALSE; for(i=0; i<g->vexnum; i++) if(!visited[i]) dfs(i,g);}void bfs(int k,graph *g) /*从第k个顶点广度优先搜索*/{ 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; q->rear=(q->rear+1)%N; } }}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);}void init_visit() /*初始化访问标识数组*/{ int i; for(i=0; i<N; i++) visited[i]=FALSE;}int main(){ graph ga; int i,j; createGraph(&ga); printf("无向图的邻接矩阵:\n"); for(i=0; i<ga.vexnum; i++) { for(j=0; j<ga.vexnum; j++) printf("%3d",ga.arcs[i][j]); printf("\n"); } init_visit(); tbfs(&ga); tdfs(&ga); return 0;}
阅读全文
0 0
- 邻接矩阵实现深度优先搜索,广度优先搜索
- 邻接矩阵的广度优先搜索和深度优先搜索
- 邻接表 邻接矩阵 广度优先搜索 深度优先搜索
- 邻接矩阵实现的广度优先搜索
- 邻接矩阵实现BFS广度优先搜索
- 邻接矩阵的广度优先搜索
- 广度 / 深度优先搜索
- Java实现深度优先搜索和广度优先搜索
- 深度优先搜索、广度优先搜索的实现
- 深度优先搜索和广度优先搜索的代码实现
- 广度优先搜索与深度优先搜索的 java 实现
- 深度优先搜索和广度优先搜索
- 深度优先搜索与广度优先搜索
- 深度优先搜索 广度优先搜索
- 深度优先搜索与广度优先搜索
- 深度优先搜索和广度优先搜索
- 深度优先搜索 广度优先搜索
- 广度优先搜索与深度优先搜索
- 基于不平衡数据的机器学习方法的设计
- Ubuntu 16.04LTS 安装 cudnn
- h5学习第一课
- JAVA实现MATLAB中repmat函数
- ubuntu下python安装第三方模块
- 邻接矩阵实现深度优先搜索,广度优先搜索
- U-Mail邮件系统详解邮件收发延迟原因及解决方案
- 试试Linux下的ip命令,ifconfig已经过时了
- MongoDB_Java操作实例
- 旅游预算 动态规划
- java练习题9
- ssm
- mysql学习 stage1-5
- VC2015 QT5中文乱码问题解决