#include<stdio.h>
#include<vector>
#include<string.h>
#define N 40
using namespace std;
vector<int>pile[N];
int n;
void find_block(int a, int &p, int &h)
{
for(p = 0; p <= n - 1; p ++)
{
for(h = 0; h < pile[p].size(); h ++)
{
if(pile[p][h] == a)
{
return;
}
}
}
return;
}
void clear_above(int p, int h)
{
int b, i;
for(i = h + 1; i < pile[p].size(); i ++)
{
b = pile[p][i];
pile[b].push_back(b);
}
pile[p].resize(h + 1);
return;
}
void pile_onto(int p, int h, int p2)
{
int i;
for(i = h; i < pile[p].size(); i ++)
{
pile[p2].push_back(pile[p][i]);
}
pile[p].resize(h);
return;
}
void print()
{
int i, j;
for(i = 0; i <= n - 1; i ++)
{
printf("%d: ", i);
for(j = 0; j < pile[i].size(); j ++)
{
printf("%d ", pile[i][j]);
}
printf("\n");
}
return;
}
int main(void)
{
int a, b, i;
int pa, ha, pb, hb;
char s1[100], s2[100];
scanf("%d", &n);
for(i = 0; i <= n - 1; i ++)
{
pile[i].push_back(i);
}
while(scanf("%s%d%s%d", s1, &a, s2, &b) != EOF)
{
find_block(a, pa, ha);
find_block(b, pb, hb);
if(pa == pb)
{
continue;
}
if(strcmp(s1, "move") == 0)
{
clear_above(pa, ha);
}
if(strcmp(s2, "onto") == 0)
{
clear_above(pb, hb);
}
pile_onto(pa, ha, pb);
print();
}
return 0;
}
例题5-2 木块问题 The Blocks Problem Uva 101
猜你喜欢
转载自blog.csdn.net/starlight321/article/details/80212725
今日推荐
周排行