以邻接表作为存储结构,采用深度优先遍历,输出图的所有顶点的值(C语言)

题目

以邻接表作为存储结构,采用深度优先遍历,输出图的所有顶点的值

测试数据
输入:
6 6
A B C D E F
A B
A C
B E
C E
A D
D F
输出:BACEDF

《以邻接表作为存储结构,采用深度优先遍历,输出图的所有顶点的值(C语言)》

#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版》严蔚敏 李冬梅 吴伟民

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/Zhangguohao666/article/details/84846962
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞