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 |
| <- | <- | <- |
|_______|_______|_______|