DFS是深度优先遍历,一般使用递归实现,优先选择深度方向遍历。
BFS是广度优先遍历,一般使用循环和队列实现,优先广度方向上的遍历,这两个算法都很常见,不多解释。
直接放代码:
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
void inputGraph(vector<vector<int>> &graph)
{
int edge=0;
cin >> edge;
for (int i=0;i<edge;i++)
{
int from, to;
cin >> from >> to;
graph[from][to] = graph[to][from] = 1;
}
}
void dfs(vector<vector<int>> &graph, vector<bool> &flag,int v) //深度优先遍历
{
if (flag[v] == false)
{
return;
}
else
{
flag[v] = false;
cout << v << endl;
for (int i = 0; i < 5; i++)
{
if (graph[v][i] == 1)
{
dfs(graph, flag, i);
}
}
}
}
void bfs(vector<vector<int>> &graph, vector<bool> &flag,int v) //广度优先遍历
{
if (flag[v] == false)
{
return;
}
else
{
queue<int> q;
flag[v] = false;
q.push(v);
while (!q.empty())
{
for (int i = 0; i < 5; i++)
{
if (graph[q.front()][i] == 1 && flag[i] == true)
{
q.push(i);
flag[i] = false;
}
}
cout << q.front() << endl;
q.pop();
}
}
}
int main()
{
vector<vector<int>> graph(5,vector<int>(5,0));
inputGraph(graph);
vector<bool> flag(5,true);
for (int i = 0; i < 5; i++)
{
dfs(graph, flag,i);
}
cout << endl;
flag = vector<bool>(5,true);
for (int i = 0; i < 5; i++)
{
bfs(graph, flag, i);
}
system("pause");
return 0;
}