图的遍历(PTA题目解答)

《图的遍历(PTA题目解答)》

《图的遍历(PTA题目解答)》

《图的遍历(PTA题目解答)》

mycode:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;


void dfs(vector<vector<int>> a,int i,vector<int> &test,vector<int> &dfs_sub)
{
	test[i] = 1;
	for (int j = 0; j < a[i].size(); j++)
	{
		if (a[i][j] == 1&& !test[j])
		{
			dfs_sub.push_back(j);
			dfs(a, j,test,dfs_sub);
		}
	}
	return;

}

int main(int argc, char *argv[])
{
	int n;
	int e;

	cin >> n;
	cin >> e;
	
	vector<vector<int> > res(n,vector<int>(n,0));
	vector<vector<int> > dfs_num;
	vector<int> dfs_sub;
	

	int count = 0;
	while (count < e)
	{
		int a, b;
		cin >> a;
		cin >> b;

		res[a][b] = 1;
		res[b][a] = 1;
		count++;
	}

	//dfs
	vector<int> test(n, 0);
	for (int i = 0; i < n; i++)
	{
		if (!test[i])
		{
			dfs_sub.push_back(i);
			dfs(res, i,test,dfs_sub);
			dfs_num.push_back(dfs_sub);
			dfs_sub.clear();
		}
			
	}


	for (int i = 0; i < dfs_num.size(); i++)
	{
		cout << "{ ";
		for (int j = 0; j < dfs_num[i].size(); j++)
		{
			cout << dfs_num[i][j] << " ";
		}
		cout << "}"<<endl;
	}


	//bfs
	vector<int> test_bfs(n,0);
	queue<int> bfs_que;
	vector<vector<int> > bfs_num;
	vector<int> bfs_sub;
	for (int i = 0; i < n; i++)
	{
		if (!test_bfs[i])
		{
			bfs_sub.push_back(i);
			test_bfs[i] = 1;
			bfs_que.push(i);
			while (!bfs_que.empty())
			{
				int m = bfs_que.front();
				bfs_que.pop();

				for (int j = 0; j < res[m].size(); j++)
				{
					if (res[m][j] == 1 && !test_bfs[j])
					{
						test_bfs[j] = 1;
						bfs_sub.push_back(j);
						bfs_que.push(j);
					}
				}

			}
			bfs_num.push_back(bfs_sub);
			bfs_sub.clear();


		}

	}

	for (int i = 0; i < bfs_num.size(); i++)
	{
		cout << "{ ";
		for (int j = 0; j < bfs_num[i].size(); j++)
		{
			cout << bfs_num[i][j] << " ";
		}
		cout << "}";
		cout << endl;
	}

	return 0;
}

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