zoukankan      html  css  js  c++  java
  • 博客完善--数独判断方法的介绍

      数独的判断方法

      给出一个二维数组,代表数独,判断是否有错。

      刚开始是针对完整的数独写判断方法,但是后面一想如果要做数独的交互程序的话,用户可能需要在填了一半数独时去检验自己是否出了问题。所以针对半完成的数独做了调整,其实就是对0做一个特殊判断就行。

      talk is cheap,show me the code!

      这段代码我写了注释,就不多解释了。

      这段代码有问题,给出了更正后的代码,当然了,也不能保证完全没有问题。

    public int Check()/*检查该矩阵是否满足数独规则,0-满足规则*/
            {                   /*1--9-该0行出错;10--18-该数字-9列出错;19--27- -18个宫格出错*/
                for (int i = 0; i < 9; i++)/*检查行的重复*/
                {
                    bool[] line = new bool[10];
                    for (int j = 0; j < 9; j++)
                    {
                        if (line[numbers[i, j]] && numbers[i, j] != 0) return i;/*出错行为第i行*/
                        else line[numbers[i, j]] = true;
                    }
                }
                for (int i = 0; i < 9; i++)/*检查列的重复*/
                {
                    bool[] row = new bool[10];
                    for (int j = 0; j < 9; j++)
                    {
                        if (row[numbers[j, i]] && numbers[j, i] != 0) return i + 9;/*出错在第i列*/
                        else row[numbers[j, i]] = true;
                    }
                }
                int p = 3, q = 3;
                while (p <= 9 && q <= 9)
                {
                    bool[] pane = new bool[10];
                    for (int i = 0; i < p; i++)
                    {
                        for (int j = 0; j < q; j++)
                        {
                            if (pane[numbers[i, j]] && numbers[i, j] != 0) return i + 18;/*出错行为第i个宫格*/
                            else pane[numbers[i, j]] = true;
                        }
                    }
                    p += 3;
                    q += 3;
                }
    
    return 0;/*未发现错误*/ }

      不过这段代码还没有经过正式的测试,VS的测试方法我还不知道使用,一直懒怠去学,先这样吧!

    注:红色的为更正的地方!

    public static int Check(int[,] numbers)/*检查该矩阵是否满足数独规则,0-满足规则*/
            {                   /*1--9-该0行出错;10--18-该数字-9列出错;19--27-该数字-18个宫格出错*/
                for (int i = 0; i < 9; i++)/*检查行的重复*/
                {
                    bool[] line = new bool[10];
                    for (int j = 0; j < 9; j++)
                    {
                        if (line[numbers[i, j]] && numbers[i, j] != 0) return i+1;/*出错行为第i行*/
                        else line[numbers[i, j]] = true;
                    }
                }
                for (int i = 0; i < 9; i++)/*检查列的重复*/
                {
                    bool[] row = new bool[10];
                    for (int j = 0; j < 9; j++)
                    {
                        if (row[numbers[j, i]] && numbers[j, i] != 0) return i + 10;/*出错在第i列*/
                        else row[numbers[j, i]] = true;
                    }
                }
                int p = 3, q = 3;
                while (p <= 9 && q <= 9)
                {
                    bool[] pane = new bool[10];
                    for (int i = p-3; i < p; i++)
                    {
                        for (int j = q-3; j < q; j++)
                        {
                            if (pane[numbers[i, j]] && numbers[i, j] != 0) return p/3*3+q/3+19;/*出错行为第i个宫格*/
                            else pane[numbers[i, j]] = true;
                        }
                    }
                    q += 3;
                    if (q == 9) 
                    {
                        p += 3;
                        q = 3;
                    }
                }
    
                return 0;/*未发现错误*/
            }
  • 相关阅读:
    树莓派添加桌面快捷方式
    计算机网络
    django-auth2
    令牌桶算法-python
    linux centos-7 添加开机自启动脚本
    pymongodb-explain
    哈希表
    tcp/udp
    jemeter之jmeter+ant+jenkins搭建接口自动化测试环境
    jmeter之jmeter + ant + jenkins(二)Jenkins安装
  • 原文地址:https://www.cnblogs.com/zh1903/p/8761036.html
Copyright © 2011-2022 走看看