zoukankan      html  css  js  c++  java
  • Sudoku 数独游戏

    #include<iostream>
    using namespace std;
    
    bool heng(int **sudo, int a, int b, int value)
    {
        bool flag = true;
        for(int i=0; i<9; i++)
        {
            if(sudo[a][i]==value)
            {
                flag = false;
            }
        }
        return flag;
    }
    
    bool shu(int **sudo, int a, int b, int value)
    {
        bool flag = true;
        for(int i=0; i<9; i++)
        {
            if(sudo[i][b]==value)
            {
                flag = false;
            }
        }
        return flag;
    }
    
    bool fang(int **sudo, int a, int b, int value)
    {
        bool flag = true;
        int x = a/3*3;
        int y = b/3*3;
    
        for(int i = 0; i<3; i++)
        {
            for(int j=0; j<3; j++)
            {
                if(sudo[x+i][y+j]==value)
                {
                    flag = false;
                }
            }
        }
        return flag;
    }
    
    void dfs(int a, int b, int **sudo, bool &flag)
    {
        if(a==9 && b==0)
        {
            for(int i=0; i<9; i++)
            {
                for(int j=0; j<8; j++)
                {
                    cout<<sudo[i][j]<<' ';
                }
                cout<<sudo[i][8]<<endl;
            }
            flag = false;//find
            return;
        }
        else
        {
            if(flag)
            {
                if(sudo[a][b]==0)
                {
                    for(int i=1; i<=9; i++)
                    {
                        if(flag && heng(sudo, a, b, i) && shu(sudo ,a, b,i) && fang(sudo, a, b, i))
                        {
                            sudo[a][b] = i;
                            dfs( (b==8)?a+1:a, (b==8)?0:b+1, sudo, flag);
                            sudo[a][b] = 0;
                        }
                    }
                }
                else
                {
                    dfs( (b==8)?a+1:a, (b==8)?0:b+1, sudo, flag);
                }
            }
            else
            {
                return ;
            }
        }
    }
    
    
    int main()
    {
        int **sudo;
        sudo = new int* [9];
        for(int i=0; i<9; i++)
        {
            sudo[i] = new int [9];
        }
    
        for(int i=0; i<9; i++)
        {
            for(int j=0; j<9; j++)
            {
                cin>>sudo[i][j];
            }
        }
    
        //dfs
        bool flag = true;
        dfs(0,0,sudo, flag);
    
    
        for(int i=0; i<9; i++)
        {
            delete [] sudo[i];
        }
        delete [] sudo;
    
        return 0;
    }
    

      

    描述

    问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个粗线宫内的数字均含1-9,并且不重复。
    输入:
    包含已知数字的9X9盘面数组[空缺位以数字0表示]
    输出:
    完整的9X9盘面数组

    知识点 查找,搜索,排序
    运行时间限制 10M
    内存限制 128
    输入

    包含已知数字的9X9盘面数组[空缺位以数字0表示]

    输出

    完整的9X9盘面数组

    样例输入 0 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 1 4 2 5 7 0 4 5 2 7 6 8 3 1
    样例输出 5 9 2 4 8 1 7 6 3 4 1 3 7 6 2 9 8 5 8 6 7 3 5 9 4 1 2 6 2 4 1 9 5 3 7 8 7 5 9 8 4 3 1 2 6 1 3 8 6 2 7 5 9 4 2 7 1 5 3 8 6 4 9 3 8 6 9 1 4 2 5 7 9 4 5 2 7 6 8 3 1
  • 相关阅读:
    combotree的总结(这个好)
    Extjs下拉树代码测试总结
    ExtJs 3 自定义combotree
    项目中EXTjs中运用到的下拉树
    EXTJS下拉树ComboBoxTree参数提交及回显方法
    Extjs window组件 拖动统制
    extjs grid数据改变后刷新的实现
    获取 ext grid 选中行 对象
    ext:grid分页,列宽度自动填满grid宽度
    pringBoot2.0启用https协议
  • 原文地址:https://www.cnblogs.com/hardsoftware/p/6255811.html
Copyright © 2011-2022 走看看