创建无向图并深度优先搜索

来源:互联网 发布:asp程序 域名绑定授权 编辑:程序博客网 时间:2024/05/16 08:35
/*创建无向图并深度优先搜索 */#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>const int MAXN = 100;typedef struct ArcCell {    char vexnum[MAXN];         //顶点    int arcnum[MAXN][MAXN];    //弧    int n, e;                  //顶点数, 弧数}Graph;int Visit[MAXN] = {0};         //定义Visit来判断顶点是否被访问,并初始化 void CreateGraph(Graph &G) {        //创建图 ,此处注意&G     int s, t;    scanf ("%d %d", &G.n, &G.e);    getchar();    for (int i=0; i<G.n; i++) {        scanf ("%c", &G.vexnum[i]);    }    for (int i=0; i<G.n; i++) {              //初始化数据         for (int j=0; j<G.n; j++) {            G.arcnum[i][j] = 0;        }    }    for (int i=0; i<G.e; i++) {              //创建图的邻接矩阵        scanf ("%d %d", &s, &t);        G.arcnum[s][t] = 1;        G.arcnum[t][s] = 1;    }}void DFSTraverse(Graph G, int i) {    //对连通分量进行深度搜索     printf ("%c", G.vexnum[i]);    for (int j=0; j<G.n; j++) {        if (G.arcnum[i][j] && !Visit[j]) {            Visit[j] = 1;            DFSTraverse(G, j);             }    }}void DFS(Graph G) {               //对整个图进行深度搜索     for (int i=0; i<G.n; i++) {   //可联想邻接矩阵和无向图来思考遍历过程         if (!Visit[i]) {     Visit[i] = 1;                     DFSTraverse(G, i);    //连通分量         }    }}int main(){    Graph G;    CreateGraph(G);        DFS(G);    return 0;}/*输入: 5 6abcde0 10 31 21 42 32 4输出 :abcde  输入: 8 9abcdefgh0 10 21 31 43 74 72 52 65 6 输出:abdhecfg */


阅读全文
0 0
原创粉丝点击