木块问题,紫书UVa101
//输/、入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置。现对这些木块进行操作,操作分为四种。
//1、move a onto b:把木块a、b上的木块放回各自的原位,再把a放到b上;
//2、move a over b:把a上的木块放回各自的原位,再把a发到含b的堆上;
//3、pile a onto b:把b上的木块放回各自的原位,再把a连同a上的木块移到b上;
//4、pile a over b:把a连同a上木块移到含b的堆上。
//当输入quit时,结束操作并输出0~n-1的位置上的木块情况
//vector的使用
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>//vector是一个使用栈的数组
using namespace std;
const int MAXN = 30;
int n;
vector<int> pile[MAXN];
void find_x(int a,int &pa,int &ka){
for(pa=0;pa<n;pa++)
for(ka=0,ka<pile[pa].size();ka++){
if(a==pile[pa][ka])return;
}
void clear_up(int a,int pa,int ka){
for(int i=ka+1,i<pile[pa].size();i++){
int b=pile[pa][i];
pile[b].push_back(b);
}
pile[pa].resize(ka+1);
}
void moveon(int a;int ka,int b )
{
for(int i=ka;i<pile[a].size();i++)
pile[b].push_back(pile[a][ka]);
pile[a].resize(ka);
}
int main()
{
int pa,pb,ka,kb,a,b;
string s1,s2;
cin>>n;
for(int i=0;i<n;i++) pile[i].push_back(i);d
while(cin>>s1>>a>>s2>>b){
find_x(a,pa,ka);
find_x(b,pb,kb);
if(pa==pb)continue;
if(s2=="onto") clear_up(pb,hb);
if(s1=="move") clear_up(pa,ha);
move_on(pa,ka,pb);
}
for(int i=0;i<n;i++){
printf("%d:",i);
for(int j=0;j<pile[i].size();j++)
printf("%d ",pile[i][j]);
puts(" ");
}
return 0;
}
还没有评论,来说两句吧...