深度优先遍历
用邻接矩阵存图,book表示是否被访问,从给出的开始结点开始访问
访问一个结点的时候,先看有没有与它邻接的点,有邻接点继续进行dfs访问
//****图的深度优先遍历****
//基于邻接矩阵 存图
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int n,m,qi,zh;
int G[N][N];
int book[N];
void dfs(int num)
{
cout<<num<<" ";//输出当前访问的点
book[num]=1;
for(int j=1;j<=n;j++)
//遍历的是所有与当前点连接的点
{
if(G[num][j]&&!book[j])
{
//只要这个点没有被访问过,并且和num这个点相连
dfs(j);
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>qi>>zh;
G[qi][zh]=1;
}
dfs(1);
}
广度优先搜索
//****图的广度优先遍历****
//基于邻接矩阵 存图
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int n,m,qi,zh;
int G[N][N];
int book[N];
queue<int>q;
void bfs(int num)
{
q.push(1);
book[1]=1;
while(!q.empty())
{
int u=q.front();
q.pop();
cout<<u<<" ";
for(int i=1;i<=n;i++)
{
if(G[u][i]&&!book[i])
{
q.push(i);
book[i]=1;
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>qi>>zh;
G[qi][zh]=1;
}
bfs(1);
}