Uva 101(vector的使用)木块问题

来源:互联网 发布:求一款网络休闲游戏 编辑:程序博客网 时间:2024/06/10 09:31

//vctor的使用,用函数封装一个操作还是蛮舒服的#include<cstdio>#include<iostream>#include<vector>#include<map>using namespace std;vector<int> a[30];char s[10];int n,u,v;void find(int num,int& x,int& h){    //找到num的位置    for(int i=0; i<n; ++i)        for(int j=0; j<a[i].size(); ++j)            if(a[i][j]==num)            {                x=i,h=j;                return;            }}void clear_above(int x,int h){    //将x,h以上的放回原位    for(int i=h+1; i<a[x].size(); ++i)        a[a[x][i]].push_back(a[x][i]);    a[x].resize(h+1);//相当于把h+1以上的全都去了}void push(int y,int x,int h){    //将x,h及以上的全都放到y上    for(int i=h; i<a[x].size(); ++i)        a[y].push_back(a[x][i]);    a[x].resize(h);}void print(){    for(int i=0; i<n; ++i)    {        printf("%d:",i);        for(int j=0; j<a[i].size(); ++j)            printf(" %d",a[i][j]);        puts("");    }}int main(){    scanf("%d",&n);    for(int i=0; i<n; ++i)        a[i].push_back(i);    while(scanf("%s",s)&&s[0]!='q')    {        if(s[0]=='m')        {            scanf("%d%s%d",&u,s,&v);            int x1,h1,x2,h2;            find(u,x1,h1);            find(v,x2,h2);            if(x1==x2) continue;            if(s[1]=='n')            {                clear_above(x1,h1);                clear_above(x2,h2);                push(x2,x1,h1);            }            else            {                clear_above(x1,h1);                push(x2,x1,h1);            }        }        else        {            scanf("%d%s%d",&u,s,&v);            int x1,h1,x2,h2;            find(u,x1,h1);            find(v,x2,h2);            if(x1==x2) continue;            if(s[1]=='n')            {                clear_above(x2,h2);                push(x2,x1,h1);            }            else push(x2,x1,h1);        }    }    print();    return 0;}