如何转换图DFS,BFS遍历的顺序
  • 板块学术版
  • 楼主【ICE】
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/8/15 23:56
  • 上次更新2023/11/6 20:09:46
查看原帖
如何转换图DFS,BFS遍历的顺序
112176
【ICE】楼主2020/8/15 23:56

RT

题目要求输出** 1 2 3 4** ,可我输出 1 4 3 2 ,如何改变这个顺序???

代码

#include<memory.h>
#include<iostream>
using namespace std;
const int N=100001,M=50000010;
struct edgenode{int num,next;};
edgenode e[M];
int a[N],n,m,k=0;
bool flag[N]={false};
int q[N],h,t;
void ins(int x,int y)
{
	k++;
	e[k].num=y;
	e[k].next=a[x];
	a[x]=k;	
}
void bfs(int x)
{
	memset(flag,false,sizeof(flag));
	h=0; t=1; q[t]=x;flag[x]=true;
	while (h<t)
	{
		int y=q[++h];
		cout<<y<<' ';
		for(int k=a[y]/*改顺序应该在这*/; k!=-1; k=e[k].next)
    		if(!flag[e[k].num])
			{
			    q[++t]=e[k].num;
				flag[e[k].num]=true;
			}
	}//问题就出在这里
}
void dfs(int x)
{
	cout<<x<<' '; flag[x]=true;
	for(int k=a[x];k!=-1;k=e[k].next)
	if(!flag[e[k].num])dfs(e[k].num);
}//问题就出在这里

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)a[i]=-1;
	for(int i=1;i<=m;i++)
	{
		int x,y;
		cin>>x>>y;
		ins(x,y);  
	}
	dfs(1);
	cout<<endl;
	bfs(1);
	cout<<endl;
	return 0;
}

题目:P5318

2020/8/15 23:56
加载中...