深度优先搜索(Depth First Search)遍历类似于树的先根遍历的推广。
假设初始状态是图中所有顶点都未曾被访问,则深度优先搜索可以从图中某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历该图,直至图中所有和v有路径的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上述过程,直至图中所有点都被访问为止
话不多说上代码
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int a[11][11];
bool visited[11];
void create_graph()
{
for (int i = 1; i < 11; i++)
{
for (int j = 1; j < 11; j++)
{
cin >> a[i][j];
}
}
}
int Adj(int x)
{
for (int i = 1; i < 11; i++)
{
if (a[x][i] == 1 && visited[i] == false)
{
return i;
}
}
return 0;
}
void dfs(int v)
{
cout << v << ' ';
visited[v] = true;
int adj = Adj(v);
while (adj)
{
if (visited[adj] == false)
{
dfs(adj);
}
adj = Adj(v);
}
}
void dfs_graph()
{
memset(visited, false, sizeof(visited));
for (int i = 1; i < 11; i++)
{
if (visited[i] == false)
{
dfs(i);
}
}
}
int main()
{
cout << "初始化图:" << endl;
create_graph();
cout << "dfs遍历结果:" << endl;
dfs_graph();
cout << endl;
return 0;
}