1. 程式人生 > >鄰接表建立無向圖,深度優先搜尋遍歷輸出

鄰接表建立無向圖,深度優先搜尋遍歷輸出

 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