题目
以邻接表作为存储结构,采用深度优先遍历,输出图的所有顶点的值
测试数据
输入:
6 6
A B C D E F
A B
A C
B E
C E
A D
D F
输出:BACEDF
#include<iostream>
using namespace std;
#define MAXNUM 100
char visited[MAXNUM];
typedef struct ArcNode{ //边节点
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct{ //顶点信息
char data;
ArcNode *firstarc;
}AdjList[MAXNUM];
typedef struct{ //邻接表
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
int LocateVex(ALGraph G,char v){
for(int i = 0; i < G.vexnum; i++){
if(G.vertices[i].data == v)return i;
}
return -1;
}
int CreateUDG(ALGraph &G){ //创建无向图
char v1,v2;
cout<<"请输入顶点数和边数:";
cin>>G.vexnum>>G.arcnum;
cout<<"请依次输入顶点:";
for(int i = 0; i < G.vexnum; i++){
cin>>G.vertices[i].data;
G.vertices[i].firstarc = NULL;
}
cout<<"请依次输入邻接边:"<<endl;
for(int k= 0; k < G.arcnum; k++){
cin>>v1>>v2;
int i = LocateVex(G,v1);
int j = LocateVex(G,v2);
ArcNode *p1 = new ArcNode;
p1->adjvex = j;
p1->nextarc = G.vertices[i].firstarc;
G.vertices[i].firstarc = p1;
ArcNode *p2 = new ArcNode;
p2->adjvex = i;
p2->nextarc = G.vertices[j].firstarc;
G.vertices[j].firstarc = p2;
}
return 1;
}
void DFT_AL(ALGraph G,int i){ //深度优先遍历邻接表
cout<<G.vertices[i].data;
visited[i] = 1;
ArcNode *p = G.vertices[i].firstarc;
int j;
while(p){
j = p->adjvex;
if(!visited[j])DFT_AL(G,j);
p = p->nextarc;
}
}
int main(){
ALGraph G;
CreateUDG(G);
cout<<"输出:";
DFT_AL(G,1);
return 0;
}
参考资料:
《数据结构 C语言版 第2版》严蔚敏 李冬梅 吴伟民