概述
#include<cstdio> #include<vector> #include<cstring> #include<algorithm> using namespace std; const int N=110; int pre[N],nex[N]; int z[N],y[N]; int wan[N]; int fa[N]; int findx(int x) { return fa[x]=(x==fa[x]?x:findx(fa[x])); } int main() { int n; scanf("%d",&n); int tot1=0,tot2=0,tot3=0; for(int i=0; i<=n; ++i) fa[i]=i; for(int i=1; i<=n; ++i) { scanf("%d%d",&pre[i],&nex[i]); int x1=findx(i),x2=findx(pre[i]),x3=findx(nex[i]); if(x1!=x2&&x2!=0) fa[x2]=x1; if(x1!=x3&&x3!=0) fa[x3]=x1; if(pre[i]==0&&nex[i]==0) { wan[tot2++]=i; continue; } if(pre[i]==0) z[tot1++]=i; if(nex[i]==0) y[tot3++]=i; } bool used[120]; memset(used,0,sizeof(used)); for(int i=0; i<tot1-1; ++i) { int f1=findx(y[i]); for(int j=0; j<tot1; ++j) { int f2=findx(z[j]); if(f1!=f2&&!used[z[j]]) { used[z[j]]=1; fa[f2]=f1; pre[z[j]]=y[i]; nex[y[i]]=z[j]; break; } } } int last,qi; if(tot2==n) last=1,qi=1; else last=y[tot1-1],qi=0; for(; qi<tot2; ++qi) { nex[last]=wan[qi]; pre[wan[qi]]=last; last=wan[qi]; } for(int i=1; i<=n; ++i) printf("%d %dn",pre[i],nex[i]); } /*10 0 9 4 0 5 0 7 2 0 3 8 10 0 4 0 6 1 0 6 0*/
转载于:https://www.cnblogs.com/mfys/p/7553129.html
最后
以上就是文静自行车为你收集整理的给任意多个链表然后要合并成一个的全部内容,希望文章能够帮你解决给任意多个链表然后要合并成一个所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复