BFS 和 DFS

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

include "stdafx.h"

include

include

include

include

include

include

using namespace std;
struct AMGraph {
vector vexs;
vector<vector> arcs;
int vecnums, arcnums;
};
class Solution
{
public:
vector vistied;
AMGraph createGraph()
{
AMGraph G;
G.vecnums = 5;
G.arcnums = 5;
vector vec1 = { 0,1,0,0,0 };
vector vec2 = { 1,0,1,1,0 };
vector vec3 = { 0,1,0,0,1 };
vector vec4 = { 0,1,0,0,1 };
vector vec5 = { 0,0,1,1,0 };
vector<vector>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 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  阅读(205)  评论(1)    收藏  举报