列出连通集(图的遍历)

前言

图的遍历,哈哈哈居然这么快就做出来了,可以可以,今天先码代码,明天填坑。

题目

给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

输入格式

输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。

输出格式

按照"{ v​1 v2 ... vk }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。

样例

输入样例

8 6
0 7
0 1
2 0
4 1
2 4
3 5

输出样例

{ 0 1 4 2 7 }
{ 3 5 }
{ 6 }
{ 0 1 2 7 4 }
{ 3 5 }
{ 6 }

思路

实现

完整代码

#include<iostream>
using namespace std;

const int MaxSize = 11;
int visit[MaxSize] = { 0, };
//邻接矩阵存储图:一个顶点结构存储顶点的相关信息,一个主体结构存储图的信息
//在本题中,因为不需要多余的顶点信息,所以把顶点的结构简化了


typedef struct {
	int edges[MaxSize][MaxSize];
	int n, e;
}MGraph;

//总是从最小的顶点出发,那就是从0出发进行遍历
void myInput(MGraph &g);
void myBFS(MGraph g);
void myDFS(MGraph g);
void myDFS_visit(MGraph g, int p);

int main() {
	MGraph G;
	int N, E;
	cin >> N >> E;
	G.n = N;
	G.e = E;
	for (int i = 0; i < N; i++)			//初始化
		for (int j = 0; j < N; j++) 
			G.edges[i][j] = -1;
	myInput(G);
	myDFS(G);
	for (int i = 0; i < MaxSize; i++)
		visit[i] = 0;
	myBFS(G);
	return 0;
}

void myInput(MGraph &g) {
	for (int i = 0; i < g.e; i++) {
		int v1, v2;
		cin >> v1 >> v2;
		g.edges[v1][v2] = g.edges[v2][v1] = 1;
	}
}

void myBFS(MGraph g) {			//用矩阵可以更好的实现从小到大访问
	int queue[MaxSize];
	int front, rear;
	front = rear = -1;
	for (int i = 0; i < g.n; i++) {
		if (visit[i] == 0) {
			cout << "{ " << i <<" ";
			queue[++rear] = i;			//最小元素入队
			visit[i] = 1;						//0已经访问过了
			while (front != rear) {
				int p = queue[++front];
				for (int j = i; j < g.n; j++)
					if (g.edges[p][j] == 1 && visit[j] == 0) { 		//联通的且未访问过的,入栈
						queue[++rear] = j;
						cout << j << " ";
						visit[j] = 1;
					}
			}
			cout << "}\n";
		}
	}
	return;
}

void myDFS(MGraph g) {
	for (int i = 0; i < g.n; i++) 
		if (visit[i] == 0) {
			cout << "{ ";
			myDFS_visit(g, i);
			cout << "}\n";
		}
	return;
}

void myDFS_visit(MGraph g, int p) {
	cout << p << " ";
	visit[p] = 1;
	for (int i = 0; i < g.n; i++) 
		if (g.edges[p][i] == 1 && visit[i] == 0) 
			myDFS_visit(g, i);
	return;
}

猜你喜欢

转载自www.cnblogs.com/Za-Ya-Hoo/p/12748946.html