zoukankan      html  css  js  c++  java
  • 1.15 构造数独

    (一)

    用回溯法构造数独

    #include <iostream>
    #include <cstring>
    #include <ctime>
    #include <cstdio>
    #include <cstdlib>
    using namespace std;
    
    int sudu[9][9];
    
    void sudu_print(int sudu[][9]) {
        for(int i = 0; i < 9; ++i) {
            for(int j = 0; j < 9; ++j) {
                cout << " " << sudu[i][j];
            }
            cout << endl;
        };
    }
    
    bool is_digital_sudu(int sudu[][9], int i, int j) {
        for(int k = 0; k < 9; ++k) {
            if(k == j) continue;
            if(sudu[i][k] == sudu[i][j]) return false;
        }
        for(int k = 0; k < 9; ++k) {
            if(k == i) continue;
            if(sudu[k][j] == sudu[i][j]) return false;
        }
        int p = i / 3;
        int q = j / 3;
        for(int m = 3 * p; m < 3 * p + 3; ++m) {
            for(int n = 3 * q; n < 3 * q + 3; ++n) 
                if(m != i && n != j && sudu[m][n] == sudu[i][j]) return false;
        }
        return true;
    }
    
    int main() {
        srand(time(0));
        memset(sudu, 0, sizeof(sudu));
        for(int i = 0; i < 9; ++i) {
            int temp = rand() % 81;
            sudu[temp/9][temp%9] = i + 1;
        }
        int k = 0;
        while(1) {
            int x = k / 9;
            int y = k % 9;
            while(1) {
                sudu[x][y]++;
                if(sudu[x][y] == 10) {
                    sudu[x][y] = 0;
                    --k;
                    break;
                }else if(is_digital_sudu(sudu, x, y)) {
                    k++;
                    break;
                }
            }
            if(81 == k) {
                sudu_print(sudu);
                return 0;
            }
        }
        return 0;
    }
    

    在LINUX下运行的话,先运行命令:g++ 文件名称.cpp   然后假设程序没有错误的话。那么在该文件夹以下会自己主动生成一个文件:.out。

    所以这个时候继续在该文件夹下运行:

    ./a.out

    (二)

    利用书上的置换的方法,简单。

    。。


  • 相关阅读:
    应用六:Vue之父子组件间的三种通信方式
    应用五:Vue之ElementUI 表格Table与分页Pagination组件化
    应用四:Vue之VUEX状态管理
    Vue 中使用 sass 或 scss 语法配置
    Sass 中文注释导致编译错误
    Sass 的安装及命令行使用
    video 标签
    原生JS添加删除Class
    HTML5 面试选题
    CSS 常用属性初始化标签名
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5132916.html
Copyright © 2011-2022 走看看