UVA 227 - Puzzle

题目大意:5x5的拼图,有一个空缺,输入拼图,在输入指令,ABLR,输出最后的拼图,如果遇到不能移动,就输出“This puzzle has no final configuration.”。

解题思路:输入拼图,读取空格所在为止,根据指令移动,每次移动空格的定位也要变动。如果不可移动就跳出。ps: 用gets输入的话,不能用5*5的二维数组会出错。注意输出格式,样例复制粘贴时,自己补行末的空格。

ac代码:

#include <iostream>
#include <cstring>
using namespace std;
void swap(char &a, char &b)
{
	char t;
	t = a;
	a = b;
	b = t;
}
bool move2(char a[][50], int &x, int &y, int n, int m)
{
	if ( x+n >=0 && x+n <= 4 && y+m >=0 && y+m <= 4 ){
		swap(a[x][y], a[x+n][y+m]);
		x = x + n;
		y = y + m;
	}
	else 
		return 0;	
return 1;
}
void move(char a[][50], char b[], int x, int y)
{
	int judge;
	for (int i=1; b[i] != '0'; i++){
		if (b[i] == 'A')
			judge = move2(a, x, y, -1, 0);	
		else if (b[i] == 'B')
			judge = move2(a, x, y, 1, 0);
		else if (b[i] == 'L')
			judge = move2(a, x, y, 0, -1);
		else if (b[i] == 'R')
			judge = move2(a, x, y, 0, 1);	
		if (!judge)
			break;
	}
	if (judge)
		for (int i=0; i<5; i++){
			for (int j=0; j<5; j++)
				printf(j==0?"%c":" %c", a[i][j]);
			printf("\n");
		}
	else 
		printf("This puzzle has no final configuration.\n");
}
int main()
{
	char a[5][50], b[1005], c[100];
	int x, y, count=1;
	while (gets(a[0]) && a[0][0] != 'Z'){
		for (int i=1; i<5; i++)
			gets(a[i]);
		b[0] = ' ';
		while (scanf("%s", c)){
			strcat(b, c);
			if (c[ strlen(c)-1 ] == '0')
				break;
		}
		for (int i=0; i<5; i++)
			for (int j=0; j<5; j++)
				if (a[i][j] == ' ')
					x = i, y = j;	
		if (count!=1)
			printf("\n");
		printf("Puzzle #%d:\n", count);
		count++;
		move(a, b, x, y);	
		memset(b, 0, sizeof(b));	
		getchar();
	}
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值