227 Puzzle (UVA)

 

 

 

思路:按照题目要求移动就行了,就是个模拟题

注意:

1.处理好出界问题

2.有些一行只有四个字符,自己要给它补一个空格

AC码

#include <stdio.h>
#include <string.h>

//自定义函数
int move(int com);
int swash(int i1, int j1, int i2, int j2);
int prt(int k, int kase);

//定义变量和数组
char puzzle[6][6];//养成把数组定义在main函数外面的习惯
int x, y; //将x,y定义在外面避免使用指针

 //主函数
int main()
{
    int kase=1; //kase表示第几副拼图
                while(1)
                {
                            int i, j, k = 1;
                            int c;



                            for(i = 0; i < 5; i++)
                                  for(j = 0; j < 6; j++)
                                        {
                                            puzzle[i][j] = getchar();
                                            if(puzzle[0][0] == 'Z' && puzzle[0][1] == '\n') return 0;
                                            if(puzzle[i][j] == ' ') {x = i; y = j;}
                                        }

                            while((c = getchar()) != EOF && c != '0')
                                    {
                                        if(c != '\n' && move(c)) {k = 0;break;}
                                    }

                            if(kase > 1) printf("\n");
                            if(!k) for(;;) if((c = getchar()) == '0') break;

                            prt(k, kase); getchar();
                            kase++;
                }
    return 0;
}

int move(int com)
{
    //A=65 B=66 L=76 R=82
    if(com==65){ x--;  if(x < 0) return 1;  swash(x, y, x + 1, y); }
    if(com==76){ y--;  if(y < 0) return 1;  swash(x, y, x, y + 1); }
    if(com==82){ y++;  if(y > 4) return 1;  swash(x, y, x, y - 1); }
    if(com==66){ x++;  if(x > 4) return 1;  swash(x, y, x - 1, y); }
    return 0;
}

int swash(int i1, int j1, int i2, int j2)
{
    int temp = puzzle[i1][j1];
    puzzle[i1][j1] = puzzle[i2][j2];
    puzzle[i2][j2] = temp;
    return 0;
}

int prt(int k, int kase)
{
    int i, j;
    //如果合法
    if(k)
        {
            printf("Puzzle #%d:\n", kase);

            for(i = 0; i < 5; i++)
               for(j = 0; j < 5; j++)
                    {
                      printf("%c",puzzle[i][j]);
                      if(j==4) printf("\n");
                      else printf(" ");
                    }
        }
    //如果不合法
    else
    {
        printf("Puzzle #%d:\n", kase);
        printf("This puzzle has no final configuration.\n");
    }
    return 0;
}

Guess you like

Origin blog.csdn.net/qq_59414507/article/details/121313580