#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn=1e5+10;
const int inf=0x3f3f3f3f;
int ant;
bool vis[maxn];
vector<int>v[maxn];//存图
void dfs(int ant)
{
printf("%d",ant);
vis[ant]=1;
for(int i=0;i<v[ant].size();i++)
{
if(!vis[v[ant][i]])
dfs(v[ant][i]);
}
}
void bfs(int ant)
{
queue<int>q;
q.push(ant);
while(!q.empty())
{
int x=q.front();
q.pop();
printf("%d",x);
vis[x]=1;
for(int i=0;i<v[x].size();i++)
{
if(!vis[v[x][i]])
{
vis[v[x][i]]=1;
q.push(v[x][i]);
}
}
}
}
void abc(int ans)
{
if(ans==0)
dfs(ant);
else
bfs(ant);
}
int main()
{
int n,k;
int x,y;
int mx=-1;
bool flag=0;
int ans;
printf("请输入点的个数:\n");
scanf("%d",&n);
printf("请输入各点:\n");
for(int i=0;i<n;i++)
{
scanf("%d",&x);
if(!flag)
{
ant=x;
flag=1;
}
}
printf("请输入边的个数:\n");
scanf("%d",&k);
printf("请输入各边:\n");
for(int i=0;i<k;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
printf("请选择遍历方式:\ndfs:0\nbfs:1\n");
scanf("%d",&ans);
while(ans!=1&&ans!=0)
{
printf("请重新选择遍历方式\n");
printf("请选择遍历方式:\ndfs:0\nbfs:1\n");
scanf("%d",&ans);
}
abc(ans);
return 0;
}
/*
8
1 2 3 4 5 6 7 8
9
1 2
1 3
2 4
2 5
4 8
5 8
3 6
3 7
6 7
1
*/
数据结构——dfs bfs
猜你喜欢
转载自blog.csdn.net/qq_43851311/article/details/103368717
今日推荐
周排行