C语言实现数独游戏的求解

  

玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1 - 9,不重复。

  

输入包含9 x9的已知数字,空位用0补齐,中间用空格隔开。(输入数独题目确保正确)
  输出为输入数独题目的解。

  

样例输入:

  
  

8 0 0 0 0 0 0 0 0
  0 0 3 6 0 0 0 0 0
  0 7 0 0 9 0 2 0 0
  7 0 5 0 0 0 0 0 0
  0 0 0 0 4 5 7 0 0
  0 0 0 1 0 0 0 3 0
  0 0 1 0 0 0 0 6 8
  0 0 8 5 0 0 0 1 0
  0 9 0 0 0 0 4 0 0

     

样例输出:
  

  
  

8 1 2 7 5 3 6 4 9
  9 4 3 2 6 8 1 7 5
  6 7 5 4 9 1 2 8 3
  1 4 2 3 5 6 7 8 9
  3 6 9 8 4 5 7 2 1
  2 8 7 1 6 9 5 3 4
  5 3 2 1 9 7 4 6 8
  4 1 3 5 2 6 8 9 7
  7 9 6 3 1 8 4 5 2

     

C语言代码样例

        # include & lt; stdio.h>   # include & lt; stdlib.h>      int * fillnumber (int [9] [9] [10], int, int, int j) {   (int k=0; k<9 k + +) {   [我][k][数字]+ +;   一个[k] [j][数字]+ +;   }   (int n=0; n<3; n + +) {   for (int m=0; m<3; m + +) {   [i/3 * 3 + n] [j/3 * 3 + m][数字]+ +;   }   }   返回一个;   }   int * resetnumber (int [9] [9] [10], int, int, int j) {   (int k=0; k<9 k + +) {   [我][k][数字]——;   [k] [j][数字]——;   }   (int n=0; n<3; n + +) {   for (int m=0; m<3; m + +) {   [i/3 * 3 + n] [j/3 * 3 + m][数字]——;   }   }   返回一个;   }      无效的搜索(int, int [9] [9], int g [9] [9] [10]) {   如果(步骤==0){   for (int i=0; i<9;我+ +){   (int j=0; j<9; j + +) {   printf (" % d”,[我][j]);   }   printf (" \ n ");   }   退出(0);   }      for (int i=0; i<9;我+ +){   (int j=0; j<9; j + +) {   如果([我][j]==0) {   (int数=1;number<10; + +) {   如果(g[我][j][数字]==0){   fillnumber (g,数量,i, j);   [我][j]=数量;   搜索(步骤1,g);   [我][j]=0;   resetnumber (g,数量,i, j);   }   }   返回;   }   }   }   }         int主要(int命令行参数个数,const char * argv []) {   int [9] [9];   int abool [9] [9] [10];   int一步=0;   for (int i=0; i<9;我+ +){   (int j=0; j<9; j + +) {   (int k=1; k<10 k + +) {   abool[我][j] [k]=0;   }   }   }   for (int i=0; i<9;我+ +){   (int j=0; j<9; j + +) {   scanf (“% d”,[我][j]);   如果([我][j]==0) {   步+ +;   }   其他{   fillnumber (abool[我][j], i, j);      }   }   }   搜索(步骤、abool);   返回0;   }   之前   
     

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

C语言实现数独游戏的求解