您的位置:首页 > 其它

UVa227 Puzzle

2016-06-25 20:04 288 查看

这题的坑点就是换行和交换时候都要检查一遍

下面上代码

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;

char pic[10][10];
char order[100];
bool flag = false;

bool isRange(int a){
if(a < 0 || a >=5){
flag = true;
return false;
}
return true;
}

void solve(){
int x = 0, y = 0;
for(int i = 0; i < 5; ++i){
for(int j = 0; j < 5; ++j){
if(pic[i][j] == ' '){
x = i;
y = j;
break;
}
}
}
for(int i = 0; order[i] != '0'; ++i){
char temp;
if(order[i] == 'A'){
x--;
if(!isRange(x))
break;
swap(pic[x][y], pic[x + 1][y]);
}else if(order[i] == 'R'){
y++;
if(!isRange(y))
break;
swap(pic[x][y], pic[x][y - 1]);
}else if(order[i] == 'B'){
x++;
if(!isRange(x))
break;
swap(pic[x][y], pic[x - 1][y]);
}else if(order[i] == 'L'){
y--;
if(!isRange(y))
break;
swap(pic[x][y], pic[x][y + 1]);
}
}
}

int main()
{
int T = 0;
while(gets(pic[0])){
memset(order, 0, sizeof(order));
if(pic[0][0] == 'Z'){
break;
}
for(int i = 1; i < 5; ++i){
gets(pic[i]);
}
for(int i = 0; ; ++i){
scanf("%c", &order[i]);
if(order[i] == '0')
break;
}
getchar();
solve();
if (T++) printf("\n");
printf("Puzzle #%d:\n", T);
if(flag){
printf("This puzzle has no final configuration.\n");
flag = false;
continue;
}

for(int i = 0; i < 5; ++i){
printf("%c", pic[i][0]);
for(int j = 1; j < 5; ++j){
printf(" %c", pic[i][j]);
}
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: