题目
分析
每一摞木块是栈,每次的移动不过出他的栈入她的栈。
思路
模仿的代码,使用vector
。
代码
#include <cstdio>
#include <vector>
using std::vector;
const int MAXN = 30;
int n;
vector<int> block[MAXN];
void find(int a, int& p, int& h)
{
for (p = 0; p < n; p++)
for (h = 0; h < block[p].size(); h++)
if (block[p][h] == a) return;
}
void clear(int p, int h)
{
for (int i = h+1; i < block[p].size(); i++) {
int b = block[p][i];
block[b].push_back(b);
}
block[p].resize(h+1);
}
void pile(int p, int h, int p2)
{
for (int i = h; i < block[p].size(); i++)
block[p2].push_back(block[p][i]);
block[p].resize(h);
}
int main()
{
int a, b, ha, hb, pa, pb;
char s1[5], s2[5];
scanf("%d", &n);
for (int i = 0; i < n; i++) block[i].push_back(i);
while (scanf("%s %d %s %d", s1, &a, s2, &b) == 4){
find(a, pa, ha);
find(b, pb, hb);
if (pa == pb) continue;
if (s2[1] == 'n') clear(pb, hb);
if (s1[0] == 'm') clear(pa, ha);
pile(pa, ha, pb);
}
for (int i = 0; i < n; i++) {
printf("%d:", i);
for (int j = 0; j < block[i].size(); j++) printf(" %d", block[i][j]);
printf("\n");
}
return 0;
}