如题,输出如下: 0:0 1:1 9 2 4 2:0 0 0 0 0 0 0 0 0 3:3 4: 5:5 8 7 6 6: 7: 8: 9: 还请诸位不吝赐教 下面附上代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int> blocks[30];
int d,h,n;
void find(int block)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<=(blocks[i].size()-1);j++)
{
if(block==blocks[i][j])
{
d=i;h=j;return;
}
}
}
}
void clear_above(int a)
{
find(a);
for(int i=(blocks[d].size()-1);i>h;i--)
blocks[blocks[d][i]].push_back(blocks[d][i]);
blocks[d].resize(h+1);
}
void move_over(int a,int b)
{
find(a);
int da=d,ha=h;
find(b);
int db=d,hb=h;
for(int i=ha;i<blocks[da].size();i++)
{
blocks[db].push_back(blocks[da][i]);
}
blocks[da].resize(ha);
}
int main()
{
int a,b;
cin>>n;
for(int i=0;i<n;i++)
blocks[i].push_back(i);
while(1)
{
string w1,w2;
cin>>w1;if(w1=="quit") break;
cin>>a>>w2>>b;
int d1,d2;
find(a);
d1=d;
find(b);
d2=d;
if(d1==d2) continue;
if(w1=="move")
{
clear_above(a);
if(w2=="onto")
clear_above(b);
move_over(a,b);
}
if(w1=="pile")
{
if(w2=="onto")
clear_above(b);
move_over(a,b);
}
}
for(int i=0;i<n;i++)
{
cout<<i<<':';
for(int j=0;j<blocks[i].size();j++)
cout<<blocks[i][j]<<' ';
cout<<endl;
}
return 0;
}