学习:
1、vector中的push_back, resize, size等函数的使用。
2、当遇到多组指令的时候,要找到各个指令之间的相似性, 以便写一个普遍性函数用于处理多组指令从而减少重复代码,而不是把所有指令全写成函数(阔怕!)
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
const int maxn = 30;
int n;
vector<int> pile[maxn];
void b_find(int a, int& p, int& h);
void p_clear(int p, int h);//delete the blocks above this block
void p_over(int pa, int ha, int pb);
void print();
int main()
{
int a, b;
string s1, s2;
cin >> n;
for(int i = 0; i < n; i++)
pile[i].push_back(i);
while(cin >> s1)
{
if(s1 == "quit")
break;
cin >> a >> s2 >> b;
int pa, ha, pb, hb;
b_find(a, pa, ha);
b_find(b, pb, hb);
if(pa == pb)
continue;
if(s1 == "move")
p_clear(pa, ha);
if(s2 == "onto")
p_clear(pb, hb);
p_over(pa, ha, pb);
}
print();
return 0;
}
void b_find(int a, int& p, int& h)
{
for(p = 0; p < n; p++)
for(h = 0; h < pile[p].size(); h++)
if(pile[p][h] == a)
return;
}
void p_clear(int p, int h)
{
for(int i = h + 1; i < pile[p].size(); i++)
{
int b = pile[p][i];
pile[b].push_back(b);
}
pile[p].resize(h + 1);
}
void p_over(int pa, int ha, int pb)
{
for(int h = ha; h < pile[pa].size(); h++)
pile[pb].push_back(pile[pa][h]);
pile[pa].resize(ha);
}
void print()
{
for(int p = 0; p < n; p++)
{
printf("%d:", p);
for(int h = 0; h < pile[p].size(); h++)
printf(" %d", pile[p][h]);
cout << endl;
}
}