UVA-3.5-謎題-227

UVA-3.5-謎題-227

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int x,y;
int A (char map[10][10]);
int B (char map[10][10]);
int L (char map[10][10]);
int R (char map[10][10]);
char map[10][10];
int mark=0;
int main()
{
    memset(map,0,sizeof(map));
    int count=1;
    while(1)
    {   int k;
        int i;
        if(count!=1)
        {
            char b;
            b=getchar();
        }
        gets(map[1]);
        //printf("map[1]=%s***\n",map[1]);
        k=strlen(map[1]);
        if(k==1&&map[1][0]=='Z')
            break;
        for(i=0;i<k;i++)
        {
            if(map[1][i]==' '||map[1][i]=='0')
            {
                x=1;
                y=i;
            }
            if(k==4)
            {
                x=1;
                y=4;
                map[x][y]=' ';
            }
        }
        int j;
        for(i=2;i<=5;i++)
           {
               gets(map[i]);
               int k1=strlen(map[i]);
               for(j=0;j<k1;j++)
               {
                   if(map[i][j]==' ')
                   {
                       x=i;
                       y=j;
                   }
               }
               if(k1==4)
               {
                   x=i;
                   y=4;
                   map[x][y]=' ';
               }
           }
        char turn;
       // printf("****x=%d,y=%d\n\n",x,y);
        //puts(map[1]);
       while(1)
       {
           scanf("%c",&turn);
           if(turn=='0')
            break;
           else
           {
               if(turn=='A')
                {
                    A(map);
                    if(mark)
                        break;
                }
               if(turn=='B')
               {
                    B(map);
                   if(mark)
                    break;
               }
               if(turn=='L')
                {
                      L(map);
                      if(mark)
                        break;
                }
               if(turn=='R')
               {
                    R(map);
                   if(mark)
                    break;
               }

           }
       }
        char b;
        //printf("\n");
        if(count!=1)
            printf("\n");
        printf("Puzzle #%d:\n",count++);
        if(mark)
        {  while(1)
            {
                scanf("%c",&turn);
                if(turn=='0')
                break;
            }
            mark=0;
            printf("This puzzle has no final configuration.\n");
            continue;
        }
        for(i=1;i<=5;i++)
        {
            for(j=0;j<5;j++)
            {
                if(j==0)
                    printf("%c",map[i][j]);
                else
                    printf(" %c",map[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}
int A (char map[10][10])
{
    char t;
    if(x-1<=0)
    {
        mark=1;
        return mark;
    }
    t=map[x-1][y];
    map[x-1][y]=map[x][y];
    map[x][y]=t;
    x=x-1;

}
int B (char map[10][10])
{
    char t;
    if(x+1>5)
    {
        mark=1;
        return mark;
    }
    t=map[x+1][y];
    map[x+1][y]=map[x][y];
    map[x][y]=t;
    x=x+1;
}
int L (char map[10][10])
{
    char t;
    //printf("L1:%s*\n",map[x]);
    if(y-1<0)
    {
        mark=1;
        return mark;
    }
    t=map[x][y-1];
    map[x][y-1]=map[x][y];
    map[x][y]=t;
    y=y-1;
    //printf("L:%s\n",map[x]);
}
int R (char map[10][10])
{
    char t;
    if(y+1>4)
    {
        mark=1;
        return mark;
    }
    t=map[x][y+1];
    map[x][y+1]=map[x][y];
    map[x][y]=t;
    y=y+1;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章