邻接矩阵表示的深度优先搜索

来源:互联网 发布:ios 类似淘宝购物车 编辑:程序博客网 时间:2024/04/29 04:12
#include<stdio.h>#include<malloc.h>#define MAXVEX 100//最大顶点数typedef struct {char vexs[MAXVEX];//顶点表 int edges[MAXVEX][MAXVEX];//邻接矩阵int n, e;//顶点数和边 }MGraph;int visited[100];void DFSM(MGraph *G, int i);/*邻接矩阵的创建*/void CreatGraph(MGraph *G){int i, j, k;char ch1, ch2;printf("输入顶点数和边数:\n");scanf("%d%d", &G->n, &G->e);printf("读入顶点信息,建立顶点表:\n");for(i=0; i<G->n; i++){getchar();scanf("%c", &G->vexs[i]);}//邻接矩阵初始化 for(i=0; i<G->n; i++)for(j=0; j<G->e; j++)G->edges[i][j] = 0;printf("读入%d条边,建立接接矩阵:\n",G->e);for(k=0; k<G->e; k++){printf("第%d条边:",k+1); getchar();scanf("%c%c", &ch1, &ch2);for(i=0; G->vexs[i]!=ch1; i++);for(j=0; G->vexs[j]!=ch2; j++);G->edges[i][j]=G->edges[j][i]=1;//无向图 printf("\n");}} void DFSTraverse(MGraph *G){int i;for(i=0; i<G->n; i++)visited[i] = 0;for(i=0; i<G->n; i++){if(!visited[i])DFSM(G, i);}}/*以vi为出发点对邻接矩阵表示的图G进行DFS搜索,设邻接矩阵是0,1矩阵*/void DFSM(MGraph *G, int i){int j;printf("%c ", G->vexs[i]);visited[i] = 1;for(j=0; j<G->n; j++){if(G->edges[i][j]==1&&!visited[j])DFSM(G, j);} }void PrintGraph(MGraph *G){int i, j;for(i=0; i<G->n; i++){for(j=0; j<G->n; j++)printf("%d ", G->edges[i][j]);printf("\n");}}main(){MGraph *G;G = (MGraph *)malloc(sizeof(MGraph));CreatGraph(G);//PrintGraph(G);DFSTraverse(G);}

原创粉丝点击