UVA - 227 Puzzle
题目大意。给定一个5X5的格子,给定a~x的英文字母和一个空格,通过ABLR移动位置
解题思路:二维数组交换元素
坑爹点:读cmd的时候要一个字符一个字符的读,不能gets()直接读,cmd可以分开的我居然没看到握草。。。
另外gets()的使用依然很迷……
#include<stdio.h>
#include<string.h>
char cmd[1001];
char map[7][7];
int main(){
int cases=0;
while(1)
{
gets(map[0]);
if(map[0][0]=='Z')
break;
for(int i=1;i<5;i++){
gets(map[i]);
}
int nx=0,ny=0;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
{
if(' '==map[i][j])
{
nx=i;ny=j;
}
}
char ch;
int s=0;
while((ch=getchar())!='0'){
if(ch=='A'||ch=='B'||ch=='R'||ch=='L')
cmd[s++]=ch;
}
cmd[s]='0';
int tx,ty;
bool flagex=false;
for(int i=0;i<strlen(cmd);i++){
if(cmd[i]=='0')
break;
switch(cmd[i])
{
case 'A':tx=nx;ty=ny;nx--;break;
case 'B':tx=nx;ty=ny;nx++;break;
case 'L':tx=nx;ty=ny;ny--;break;
case 'R':tx=nx;ty=ny;ny++;break;
}
if(nx<0||nx>4||ny<0||ny>4){
flagex=true;
break;
}
else{
map[tx][ty]=map[nx][ny];
map[nx][ny]=' ';
}
}
if (cases ++) printf("\n");
printf("Puzzle #%d:\n",cases);
if(flagex)
printf("This puzzle has no final configuration.\n");
else{
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
if(!j)printf("%c",map[i][j]);
else printf(" %c",map[i][j]);
}
printf("\n");
}
}
getchar();
}
return 0;
}