shuduku

https://github.com/qianlAIyf/shuduku

PSP:

解题思路:

1.先随机生成一个9*9的宫格,然后从这些格子中随机删去一些格子,使得最后能得到解。

  另外想了一个方法,利用3*3宫格,拓展至9*9宫格。

2.从各种博客上查阅别人的写法,借鉴其中的优点。

3.设计实现过程:

   (1)利用<time.h>将时间库引至文件,并定义一个3*3和一个9*9的数组;

   (2)使用的函数:

   create_phalanx(phalanx);

        place_phalanx(phalanx,sudoku,4);

        shift_down(phalanx);

        place_phalanx(phalanx,sudoku,3);

        shift_right(phalanx);

        place_phalanx(phalanx,sudoku,0);

        shift_up(phalanx);

        place_phalanx(phalanx,sudoku,1);

        shift_up(phalanx);

        place_phalanx(phalanx,sudoku,2);

        shift_left(phalanx);

        place_phalanx(phalanx,sudoku,5);

        shift_left(phalanx);

        place_phalanx(phalanx,sudoku,8);

        shift_down(phalanx);

        place_phalanx(phalanx,sudoku,7);

        shift_down(phalanx);

        place_phalanx(phalanx,sudoku,6);

        output(sudoku);

 (3)函数之间的关系: place_phalanx(phalanx,sudoku,n)函数总共有九个,每调用一次,就在9*9宫格中加入一个随机生成3*3宫格。

4.关键函数

void place_phalanx(int phalanx[][3],int sudoku[][9],int index_block)

{

        int i,j;

        for(i=0;i<3;i++)

                 for(j=0;j<3;j++)

                         sudoku[index_block/3*3+i][index_block%3*3+j]=phalanx[i][j];

}

这是一个思路图:

_________________________

|   0   |   1   |   2   |

|  right  |   up  |   up  |

|  ->   |   ->        |   v   |

|_______|_______|_______|

|   3   |   4   |   5   |

| down  |       |  left |

|   ^   |            |   v   |

|_______|_______|_______|

|   6   |   7   |   8   |

| down  |  down |  left |

|  <-   |   <-        |   <-  |

|_______|_______|_______|

原文地址:https://www.cnblogs.com/Ceqianl/p/8850006.html