邻接表创建无向图,深度优先搜索遍历输出

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include <iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 #define MVNum 100
 7 int vis[MVNum];
 8 typedef struct ArcNode
 9 {
10     int adjvex;
11     struct ArcNode *nextarc;
12 }ArcNode;
13 typedef struct VNode
14 {
15     char data;
16     ArcNode *firstarc;
17 }VNode, AdjList[MVNum];
18 typedef struct
19 {
20     AdjList vertices;
21     int vexnum,arcnum;
22 }ALGraph;
23 int LocateVex(ALGraph &G,char v)
24 {
25     for(int i=0;i<G.vexnum;i++)
26     {
27         if(G.vertices[i].data==v)
28             return i;
29     }
30     return -1;
31 }
32 void  CreateALGraph(ALGraph &G)
33 {
34     int i,j,k,v;
35     char v1,v2;
36     ArcNode *p1,*p2;
37     scanf("%d%d",&G.vexnum,&G.arcnum);
38     for(v = 0;v < G.vexnum;v++)
39     {
40         scanf("%s",&G.vertices[v].data);
41         G.vertices[v].firstarc=NULL;
42     }
43     getchar();
44     for(k = 0;k < G.arcnum;k++)
45     {
46         scanf("%c %c",&v1,&v2);
47         getchar();
48         i=LocateVex(G,v1);
49         j=LocateVex(G,v2);
50         p1=new ArcNode;
51         p1->adjvex=j;
52         p1->nextarc=G.vertices[i].firstarc;
53         G.vertices[i].firstarc=p1;
54 
55         p2=new ArcNode;
56         p2->adjvex=i;
57         p2->nextarc=G.vertices[j].firstarc;
58         G.vertices[j].firstarc=p2;
59     }
60 }
61 void DFS(ALGraph G,int v)
62 {
63     int w;
64     ArcNode *p;
65     printf("%c",v+'A');
66     vis[v]=1;
67     p=G.vertices[v].firstarc;
68     while(p!=NULL)
69     {
70         w=p->adjvex;
71         if(!vis[w])
72         DFS(G,w);
73         p=p->nextarc;
74     }
75 }
76 int main(void)
77 {
78     ALGraph G;
79     memset(vis,0,sizeof(vis));
80     CreateALGraph(G);
81     DFS(G,0);
82     return 0;
83 } 

样例输入:

8 9
A B C D E F G H
A B
B D
B E
E F
D F
A C
C G
C H
G H

样例输出:

ACHGBEFD

猜你喜欢

转载自www.cnblogs.com/diandianer/p/9965932.html