zoukankan      html  css  js  c++  java
  • 搜索:解数独

    我记得有DLX精准覆盖算法,然后应用舞蹈链数据结构来解决这个问题来着

    但是这里就直接贴一个裸的回溯的了

     1 #include<iostream>
     2 #include<cstdlib>
     3 using namespace std;
     4 int a[9][9];
     5 inline bool check(int x,int y,int e){
     6     for(int i=0;i<=8;i++)
     7         if(a[x][i]==e&&i!=y)return 0;
     8     for(int i=0;i<=8;i++)
     9     if(a[i][y]==e&&i!=x)
    10         return 0;
    11     for(int i=x/3*3;i<x/3*3+3;i++)
    12     for(int j=y/3*3;j<y/3*3+3;j++)
    13         if(a[i][j]==e&&i!=x&&j!=y)
    14             return 0;
    15     return 1;
    16 }
    17 void dfs(int z)
    18 {
    19     if(z==81)
    20     {
    21         for(int i=0;i<=8;i++)
    22         {
    23             for(int j=0;j<=8;j++)
    24                 cout<<a[i][j]<<" ";
    25             cout<<endl;
    26         }
    27         exit(0);
    28     }
    29     int x=z/9;
    30     int y=z%9;
    31     if(a[x][y])
    32         dfs(z+1);
    33     else
    34     {
    35         for(int i=1;i<=9;i++)
    36         if(check(x,y,i))
    37         a[x][y]=i,dfs(z+1);
    38         a[x][y]=0;
    39     }    
    40 }
    41 int main()
    42 {
    43     for(int i=0;i<=8;i++)
    44     for(int j=0;j<=8;j++)
    45         cin>>a[i][j];
    46     dfs(0);
    47     return 0;
    48 }
  • 相关阅读:
    面试算法爱好者书籍/OJ推荐
    go语言——数据类型
    go编程规范
    Go语言常见语法错误
    go语言入门
    python——itertools
    linux sed使用
    python——optparse模块
    Linux基本配置
    文件包含
  • 原文地址:https://www.cnblogs.com/aininot260/p/9623991.html
Copyright © 2011-2022 走看看