Uva-227-Puzzle

這道題目也是一道比較簡單的題目,但是其中涉及很多個情況判斷。

代碼如下:

#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..呆瓜看呆瓜,呆瓜愛呆瓜。


發佈了39 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章