zoukankan      html  css  js  c++  java
  • UVa227 Puzzle

    #include <stdio.h>

    int main()
    {
        enum { SIZE = 5 };
        int kase = 0, i = 0, j = 0, ei, ej, valid;
        char puzzle[SIZE][SIZE]; // 行主序存储:第一个下标行号,第二个下标列号
        char c;
        while (1)
        {
            for (i = 0; i < SIZE; ++i)
            {
                for (j = 0; j < SIZE; ++j)
                {
                    c = getchar();
                    if (c == 'Z')
                        return 0; // 函数中直接跳出多重循环,用return
                    puzzle[i][j] = c;
                    if (c == ' ')
                    {
                        ei = i;
                        ej = j;
                    }
                }
                getchar(); // 换行符
            }

            valid = 1; // 首先必须认为指令序列合法
            do
            {
                c = getchar();
                if (!valid)
                    continue; // 已经非法了,剩下的指令序列直接读光
                
                switch (c)
                {
                case 'A':
                    if (ei - 1 >= 0)
                    {
                        puzzle[ei][ej] = puzzle[ei-1][ej];
                        puzzle[--ei][ej] = ' ';
                    }
                    else
                    {
                        valid = 0;
                    }
                    break;

                case 'B':
                    if (ei + 1 < SIZE)
                    {
                        puzzle[ei][ej] = puzzle[ei+1][ej];
                        puzzle[++ei][ej] = ' ';
                    }
                    else
                    {
                        valid = 0;
                    }
                    break;

                case 'L':
                    if (ej - 1 >= 0)
                    {
                        puzzle[ei][ej] = puzzle[ei][ej-1];
                        puzzle[ei][--ej] = ' ';
                    }
                    else
                    {
                        valid = 0;
                    }
                    break;

                case 'R':
                    if (ej + 1 < SIZE)
                    {
                        puzzle[ei][ej] = puzzle[ei][ej+1];
                        puzzle[ei][++ej] = ' ';
                    }
                    else
                    {
                        valid = 0;
                    }
                    break;
                }
            } while (c != '0');
            getchar(); // 0后面的换行符

            if (kase)
                putchar(' ');
            printf("Puzzle #%d: ", ++kase);
            if (valid)
            {
                for (i = 0; i < SIZE; ++i)
                {
                    for (j = 0; j < SIZE-1; ++j)
                        printf("%c ", puzzle[i][j]);
                    printf("%c ", puzzle[i][SIZE-1]);
                }
            }
            else
            {
                printf("This puzzle has no final configuration. ");
            }
        }

        return 0;
    }

  • 相关阅读:
    不同环境下vue-cli3+打包命令配置
    本地node服务启动vue打包项目
    js匿名函数
    本地vue扩展程序。
    vant轮播插件swipe实现三个一屏,并修改指示器样式
    vue中placeholder中使用字体图标
    为什么js中重复多次调用正则时会报错,会交替出现的那种
    create-react-app兼容ie9配置
    react之form表单工具:formik+yup
    Flex布局
  • 原文地址:https://www.cnblogs.com/danny1221/p/4591975.html
Copyright © 2011-2022 走看看