您的位置:首页 > 其它

习题3-5 谜题 解题报告

2015-11-26 21:35 253 查看
题目:



代码:

#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、将每个操作定义为一次交换过程即可轻松解出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: