UVA 101

2 篇文章 0 订阅
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
using namespace std;
#define MAX 28
#define MOVE 0
#define ONTO 1
#define QUIT 2
vector<int> blocks[MAX];


const string cmd[] = { "move","onto","quit" };
int n;

void ReSet(int indexOfBlock, int height)
{
	int size = blocks[indexOfBlock].size();
	for (int i = height + 1;i != size;++i)
	{
		blocks[i].push_back(blocks[indexOfBlock][i]);//还原height以上的木块
	}
	blocks[indexOfBlock].resize(height + 1);//清除被还原的木块
}
void FindSite(int block, int &indexOfBlock, int &height)
{
	for (int i = 0;i != n;++i)
	{
		int size = blocks[i].size();
		for (int j = 0;j != size;++j)
		{
			if (blocks[i][j] == block)
			{
				indexOfBlock = i;
				height = j;
				return;
			}
		}
	}
}
void pile(int a_index, int a_height, int b_index)//将a及其上的木块堆在b的顶部
{
	int size = blocks[a_index].size();
	for (int i = a_height; i != size; ++i)
	{
		blocks[b_index].push_back(blocks[a_index][i]);
	}
	blocks[a_index].resize(a_height);
}
void print()
{
	for (int i = 0;i != n;++i)
	{
		printf("%d:", i);
		int size = blocks[i].size();
		for (int j = 0;j != size;++j)
		{
			printf(" %d", blocks[i][j]);
		}
		printf("\n");
	}
}
int main()
{
	cin >> n;
	for (int i = 0;i != n;++i)
	{
		blocks[i].push_back(i);
	}
	int a, a_index, a_height, b, b_index, b_height;
	string cmd_oper, cmd_type;
	while (cin >> cmd_oper >> a >> cmd_type >> b)
	{
		if (cmd_oper == cmd[QUIT])
		{
			break;
		}
		FindSite(a, a_index, a_height);
		FindSite(b, b_index, b_height);
		if (a_index == b_index)
		{
			continue;
		}
		if (cmd_type == cmd[ONTO])
		{
			ReSet(b_index, b_height);
		}
		if (cmd_oper == cmd[MOVE])
		{

			ReSet(a_index, a_height);
		}
		pile(a_index, a_height, b_index);
	}
	print();
	return 0;
}
主要在于提取几个命令的共同点来简化问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值