题目:
代码:
#include <iostream>
#include <stdio.h>
using namespace std;
int p,q;
int main()
{
char b,m;
int i,j,n=1,k;
char a[6][6];
for(;;)
{
cin.sync();
for(i=0;i<5;i++)//ÊäÈë
{
cin.getline(a[i],6);
if(a[0][0]=='Z')
{
return 0;
}
for(j=0;j<5;j++)
{
if(a[i][j]=='\040')
{
p=i;
q=j;
}
}
}
while(cin >> b)
{
k=1;
if(b=='0')
break;
if(b=='A')
{
if(p-1<=4&&p-1>=0)
{
m=a[p][q];
a[p][q]=a[p-1][q];
a[p-1][q]=m;
p--;
}
else
{
k=0;
break;
}
}
else if(b=='B')
{
if(p+1<=4&&p+1>=0)
{
m=a[p][q];
a[p][q]=a[p+1][q];
a[p+1][q]=m;
p++;
}
else
{
k=0;
break;
}
}
else if(b=='L')
{
if(q-1<=4&&q-1>=0)
{
m=a[p][q];
a[p][q]=a[p][q-1];
a[p][q-1]=m;
q--;
}
else
{
k=0;
break;
}
}
else if(b=='R')
{
if(q+1<=4&&q+1>=0)
{
m=a[p][q];
a[p][q]=a[p][q+1];
a[p][q+1]=m;
q++;
}
else
{
k=0;
break;
}
}
}
if(!k)
{
cout << "This puzzle has no final configuration." << endl << endl;
continue;
}else
{
cout << "Puzzle #" << n<< ":" << endl ;
n++;
for(i=0;i<5;i++)//Êä³ö
{
for(j=0;j<5;j++)
{
if(j)cout << " ";
cout << a[i][j] ;
}
cout << endl;
}
cout << endl;
}
}
return 0;
}
解析:
1、注意空格的位置交换与溢出判断。
2、将每个操作定义为一次交换过程即可轻松解出。