Uva-227-Puzzle

来源:互联网 发布:知乎有趣的女朋友 编辑:程序博客网 时间:2024/05/02 02:59

这道题目也是一道比较简单的题目,但是其中涉及很多个情况判断。

代码如下:

#include<stdio.h>#include<stdlib.h>#include<string.h>main(){    int i,j,leng,fgi,fgj,puzz = 1,PD =1;    char a[6][6],order[100],pa[6];    while(gets(pa) != NULL && strcmp(pa, "Z") != 0)    {    if(strlen(pa) == 1)        return 0;    for(i = 0 ;i < 5;i++)        a[0][i] = pa[i];    gets(pa);    for(i = 0 ;i < 5;i++)        a[1][i] = pa[i];    gets(pa);    for(i = 0 ;i < 5;i++)        a[2][i] = pa[i];    gets(pa);    for(i = 0 ;i < 5;i++)        a[3][i] = pa[i];    gets(pa);    for(i = 0 ;i < 5;i++)        a[4][i] = pa[i];    goto start;start:    gets(order);    leng = strlen(order);    for(i = 0; i < 5; i++)    {        for(j = 0; j < 5; j++)            if(a[i][j] == ' ')            {                fgi = i;                fgj = j;                goto loop;            }    }    goto loop;loop:        for(i = 0; i < leng-1; i++)        {            if(order[i] == 'A')            {                if(fgi == 0)                    PD = 0;       //我曾一度在这里直接判断没有结果然后输出,但是这样做违反了题目会有多行移动指令的要求,被这个问题卡了很久。                else                {                    a[fgi][fgj] = a[fgi-1][fgj];                    a[fgi-1][fgj] = ' ';                    fgi = fgi-1;                }            }            if(order[i] == 'B')            {                if(fgi == 4)                    PD = 0;                else                {                    a[fgi][fgj] = a[fgi+1][fgj];                    a[fgi+1][fgj] = ' ';                    fgi = fgi+1;                }            }            if(order[i] == 'R')            {                if(fgj == 4)                    PD = 0;                else                {                    a[fgi][fgj] = a[fgi][fgj+1];  //这里原来先是用temp做中间变量,然后倒换,但是会有崩溃问题,为何不知,只是想到了这个直接倒换的办法。                    a[fgi][fgj+1] = ' ';                    fgj = fgj+1;                }            }            if(order[i] == 'L')            {                if(fgj == 0)                    PD = 0;                else                {                    a[fgi][fgj] = a[fgi][fgj-1];                    a[fgi][fgj-1] = ' ';                    fgj = fgj-1;                }            }        }        if(order[i] == '0')            goto endstep;        else        {            if(order[i] == 'A')            {                if(fgi == 0)                    PD = 0;                else                {                    a[fgi][fgj] = a[fgi-1][fgj];                    a[fgi-1][fgj] = ' ';                    fgi = fgi-1;                }            }            if(order[i] == 'B')            {                if(fgi == 4)                    PD = 0;                else                {                    a[fgi][fgj] = a[fgi+1][fgj];                    a[fgi+1][fgj] = ' ';                    fgi = fgi+1;                }            }            if(order[i] == 'R')            {                if(fgj == 4)                    PD = 0;                else                {                    a[fgi][fgj] = a[fgi][fgj+1];                    a[fgi][fgj+1] = ' ';                    fgj = fgj+1;                }            }            if(order[i] == 'L')            {                if(fgj == 0)                    PD = 0;                else                {                    a[fgi][fgj] = a[fgi][fgj-1];                    a[fgi][fgj-1] = ' ';                    fgj = fgj-1;                }            }            goto start;        }endstep:        if(PD != 1)        {            if(puzz != 1)                printf("\n");  //这里如果不能处理好空格问题会wrong answer.            printf("Puzzle #%d:\n",puzz);            printf("This puzzle has no final configuration.\n");            PD = 1;        }        else        {            if(puzz != 1)                printf("\n");            printf("Puzzle #%d:\n",puzz);            for(i = 0; i < 5; i++)            {                for(j = 0; j < 4; j++)                    printf("%c ",a[i][j]);                printf("%c\n",a[i][4]);            }        }goto bk;bk:    puzz++;}}
by
  AZ..呆瓜看呆瓜,呆瓜爱呆瓜。


0 0