图的深度遍历(邻接表)

#include <iostream>
#include <queue>

#define MaxSize 10
using namespace std;

bool visited[MaxSize]; //全局数组,记录结点是否已补访问

typedef struct edgenode {  //边表结点
	int adjvex;  //邻接点
	int weight;  //权值
	edgenode *next; //下一条边
};

typedef struct vertexnode { //顶点结点
	char data;  //结点数据
	edgenode *fist;  //指向第一条边
}AdjList[MaxSize];

typedef struct AdjListGraph {
	AdjList adjlist;  //邻接表
	int vex;  //顶点数
	int edge; //边数
};

void Init(AdjListGraph &G) {  //初始化为未访问
	for (int i = 0; i < MaxSize; i++) {
		visited[i] = false;
	}
}

int Location(AdjListGraph &G,char c) {  //寻找顶点数据的邻接点
	for (int i = 0; i < G.vex; i++) {
		if (G.adjlist[i].data == c) {
			return i;
		}
	}
	return -1;
}

void Create(AdjListGraph &G) {  //创建图
	cout << "请输入该图的顶点数以及边数:" << endl;
	cin >> G.vex >> G.edge;
	cout << "请输入相关顶点:" << endl;
	for (int i = 0; i < G.vex; i++) {
		cin >> G.adjlist[i].data;
		G.adjlist[i].fist = NULL;
	}
	char a, b;
	int m, n;
	cout << "请输入相关边的顶点:" << endl;
	for (int i = 0; i < G.edge; i++) {
		cin >> a >> b;
		m = Location(G, a);  //寻找顶点号
		n = Location(G, b);

		if (m != -1 && n != -1) {  //寻找到位置
			edgenode *temp = new edgenode;
			temp->adjvex = n;
			temp->next = G.adjlist[m].fist;
			G.adjlist[m].fist = temp;
		}
	}
}

void DFS(AdjListGraph &G,int v) {  //图的深度遍历
	int w;
	if (visited[v] == false) {
		cout << G.adjlist[v].data << " ";
		visited[v] = true;  //设置已访问过
	}

	edgenode *temp = G.adjlist[v].fist;
	if (temp != NULL) {
		w = temp->adjvex;
		if (visited[w] == false) {
                DFS(G, w);
            }
		while (temp->next != NULL) {
			temp = temp->next;
			w = temp->adjvex;
			if (visited[w] == false) {
                            DFS(G, w);
                        }
		}
	}
}


void DFS_Main(AdjListGraph &G) {  //这个函数的存在是防止不连通图的存在
	for (int i = 0; i < G.vex; i++) {
		if (visited[i] == false) {
			DFS(G,i);
		}
	}
}

int main() {
	AdjListGraph G;
	Init(G);
	Create(G);  //创建图
	DFS_Main(G);

	system("pause");
	return 0;
}

/*
8 7 a b c d e f g h
a b
a f
b c
b d
d e
f g
f h
*/

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