60分,急求大佬帮忙看看!!
查看原帖
60分,急求大佬帮忙看看!!
37322
stephen→_→楼主2020/11/29 09:42
#include <bits/stdc++.h>

using namespace std;

vector <int> G[10005];
int f[5005],q=0,vis[5005],x,y,n,m,b[5005],ux,uy,a[5005];
void dfs(int x){
	f[++q] = x;
	for(int i = 0; i < G[x].size(); ++i)
		if(!vis[G[x][i]]) {
			int y = G[x][i];
			vis[y] = 1;
			dfs(y);
		}
}
void dfs1(int x){
	a[++q] = x;
	//printf("%d %d ",a[q],x);
	for(int i = 0; i < G[x].size(); ++i){
		int y = G[x][i];
		if((x==ux&&y==uy)||(x==uy&&y==ux)) continue;
		if(!vis[y]){
			vis[y] = 1;
			dfs(y);
			//printf("%d ",y);
		}
	}
}
void choseans(){
	int bj = 0;
	for(int i = 1; i <= n; ++i){
		if(a[i] < f[i]) {
			bj = 1;
			break;
		}else if(a[i]>f[i]) break;
	}
	if(bj) 
	for(int i = 1; i <= n; ++i){
		f[i] = a[i];
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i = 1; i <= m; ++i){
		scanf("%d%d",&x,&y);
		G[x].push_back(y);
		G[y].push_back(x);
		b[y]++;b[x]++; 
	}
	for(int i = 1; i <= n; ++i)
		sort(G[i].begin(),G[i].end());
		vis[1] = 1;
		dfs(1);
	if(m==n-1){
		for(int i = 1; i <= n; ++i) printf("%d ",f[i]); 
	}else if(m==n){
		for(int i = 1; i <= n; ++i){
			//if(b[i] == 1) continue;
			for(int j = 0; j < G[i].size(); ++j){
				//if (b[j]==1) continue;
				q = 0;
				memset(vis,0,sizeof(vis));
				memset(a,0,sizeof(a));
				ux = i;uy = G[i][j];
				vis[1] = 1;
				dfs1(1);//puts("");
				/*for(int k = 1; k <= n; ++k) {
					printf("%d ",a[k]);
				}*/
				//printf(" %d\n",q);
				if(q==n) choseans();
			}
		}
		for(int i = 1; i <= n; ++i) printf("%d ",a[i]);
	}
	return 0;
}
2020/11/29 09:42
加载中...