大水题,由于各种变量重名及瞎引用竟然搞了一下午,智毕硬。。。另外这题看到网上各种上百行的代码,颇为不解。。。
#include <iostream>
using namespace std;
int c[30][30];
int pos[30],top[30];
void rtn(int n){
int p=pos[n],&t=top[p],m;
while( (m=c[p][t])!=n ){
pos[m]=m; top[m]=0; c[m][0]=m; t--;
}
}
void move(int a,int b){
int pa=pos[a],pb=pos[b],&ta=top[pa],&tb=top[pb],t=0;
while(c[pa][t]!=a) t++;
for(int i=t;i<=ta;i++){
int m=c[pa][i];
pos[m]=pb; c[pb][++tb]=m;
}
ta=t-1;
}
int main()
{
int n; cin>>n;
for(int i=0;i<n;i++){
c[i][0]=i; pos[i]=i; top[i]=0;
}
while(1){
char s[5],ss[5]; int a,b;
cin>>s; if(s[0]=='q') break;
cin>>a>>ss>>b; if(pos[a]==pos[b]) continue;
if(s[0]=='m'&&ss[1]=='n') rtn(a),rtn(b),move(a,b);
if(s[0]=='m'&&ss[1]=='v') rtn(a),move(a,b);
if(s[0]=='p'&&ss[1]=='n') rtn(b),move(a,b);
if(s[0]=='p'&&ss[1]=='v') move(a,b);
}
for(int i=0;i<n;i++){
cout<<i<<':';
for(int j=0;j<=top[i];j++) cout<<' '<<c[i][j];
cout<<endl;
}
return 0;
}