20分求助
查看原帖
20分求助
468709
HZL1128楼主2023/1/11 11:13

哪位大佬救救我

#include<bits/stdc++.h>
using namespace std;
int g[100005][100005],b[100005],que[100005];
bool vis[100005];
int n,m,cnt,sum,head,tail;
void dfs(int cur){
	b[++cnt]=cur;
	vis[cur]=1;
	for(int i=1;i<=n;i++){
		if(g[cur][i]==1&&vis[i]==0)dfs(i);
	}
}
void bfs(int cur){
	head=1;
	tail=2;
	que[head]=cur;
	vis[cur]=1;
	while(head<tail){
		cur=que[head];
		for(int i=1;i<=n;i++){
			if(g[cur][i]&&!vis[i]){
				que[tail++]=i;
				vis[i]=1;
			}
			if(tail>n)break;
		}
		head++;
	}
	for(int i=1;i<=n;i++)cout<<que[i]<<" ";
	return;
}
int main(){
	int u,v;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		g[u][v]=1;
	}
	for(int i=1;i<=n;i++){
		if(vis[i]==0)dfs(i);
	}
	for(int i=1;i<=n;i++)cout<<b[i]<<" ";
	cout<<endl;
	for(int i=1;i<=n;i++)vis[i]=0;
	for(int i=1;i<=n;i++){
		if(vis[i]==0)bfs(i);
	}
	return 0;
}
2023/1/11 11:13
加载中...