数据结构——dfs bfs

#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
*/
发布了40 篇原创文章 · 获赞 2 · 访问量 855

猜你喜欢

转载自blog.csdn.net/qq_43851311/article/details/103368717
今日推荐