BFS 和 DFS

DFS用到递归,BFS要用到一个辅助队列

#include "stdafx.h"

#include<iostream> 
#include<vector>
#include<string>
#include<queue>
#include<algorithm>
#include<numeric>

using namespace std;
struct AMGraph {
	vector<int> vexs;
	vector<vector<int>> arcs;
	int vecnums, arcnums;
};
class Solution 
{
public:
	vector<bool> vistied;
	AMGraph createGraph()
	{
		AMGraph G;
		G.vecnums = 5;
		G.arcnums = 5;
		vector<int> vec1 = { 0,1,0,0,0 };
		vector<int> vec2 = { 1,0,1,1,0 };
		vector<int> vec3 = { 0,1,0,0,1 };
		vector<int> vec4 = { 0,1,0,0,1 };
		vector<int> vec5 = { 0,0,1,1,0 };
		vector<vector<int>>vec;
		vec.push_back(vec1);
		vec.push_back(vec2);
		vec.push_back(vec3);
		vec.push_back(vec4);
		vec.push_back(vec5);

		G.vexs = { 1,2,3,4,5 };
		G.arcs = vec;
		return G;
	}
	void DFS(AMGraph G,int v)
	{
		vistied[v] = true;
		cout << v<<" ";
		for (int i = 0;i < G.vecnums;i++)
		{
			if (G.arcs[v][i]==1 && vistied[i] == false)
			{
				DFS(G, i);
			}
		}
	}
	

	void DFSTravers(AMGraph G)
	{
		vistied.clear();
		for (int i = 0;i < G.vecnums;i++)
		{
			vistied.push_back(false);
		}
		for (int i = 0;i < G.arcnums;i++)
		{
			if (vistied[i] == false)
			{
				DFS(G, i);
			}
		}
		cout << endl;
	}

	queue<int> qu;
	void BFS(AMGraph G,int v)
	{
		vistied[v] = true;
		qu.push(v);
		while (!qu.empty())
		{
			int v = qu.front();
			qu.pop();
			cout << v << " ";
			for (int i = 0;i < G.vecnums;i++)
			{
				if (G.arcs[v][i] == 1 && vistied[i] == false)
				{
					vistied[i] = true;
					qu.push(i);
				}
			}
		}
		
	}
	void BFSTravers(AMGraph G)
	{
		vistied.clear();
		for (int i = 0;i < G.vecnums;i++)
		{
			vistied.push_back(false);
		}
		for (int i = 0;i < G.vecnums;i++)
		{
			if (vistied[i] == false)
			{
				BFS(G, i);
			}
		}
		cout << endl;
	}
};

int main()
{
	
	Solution so;
	AMGraph G=so.createGraph();
	so.DFSTravers(G);
	so.BFSTravers(G);
	return 0;
	
}
posted @ 2017-05-09 11:15  wdan2016  阅读(173)  评论(1编辑  收藏  举报