习题3-5 谜题 解题报告

来源:互联网 发布:造价软件怎么安装 编辑:程序博客网 时间:2024/06/16 04:14

题目:
这里写图片描述

代码:

#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、将每个操作定义为一次交换过程即可轻松解出。

0 0