C語言實現的數獨解題程式

2021-06-28 12:44:01 字數 1540 閱讀 4567

用最暴力的遞迴方式在所有可能的空間中尋找數獨的解法。試了一下,不管多難的數獨都能在1s內找到所有答案,所以也沒有採取更智慧型的演算法進行優化,如加入人的邏輯推理演算法。

這裡只是把一種最笨的方法分享出來,只是感嘆現在的計算機運算能力太強大了。原始碼如下:

#include

#include

/*數獨二維陣列*/

int g_s[9][9] = ,,,

,,,,

,};/*列印當前數獨狀態*/

int prt()

printf("\n");

}getchar();

}/*獲取乙個位置當前所有可能的解*/

int get_all_num(int i,int j,int a[9])

;int row,col,k;

/*刪除當前行中已出現的值*/

for(col = 0;col < 9;col++)

}/*刪除當前列中已出現的值*/

for(row = 0;row < 9;row++)

}/*刪除當前九宮格中已出現的值*/

row = (i/3)*3;

col = (j/3)*3;

for(i = row;i < (row+3);i++)}}

i = 0;

for(k = 0;k < 9;k++)

}return i;

}/*判斷當前行是否合法*/

int check_row(int i,int num)

}return 1;

}/*判斷當前列是否合法*/

int check_col(int j,int num)

}return 1;

}/*判斷當前九宮格是否合法*/

int check_block(int i,int j,int num)}}

return 1;

}/*嘗試乙個解*/

int try_one(int i,int j,int num)

return 0;

}/*獲取下乙個要填空的位置*/

int get_next(int *pi,int *pj)

}j = 0;

}if(r == 9)

*pi = r;

*pj = c;

return 1;

}/*找到乙個解*/

void finish()

/*處理乙個位置*/

int do_one(int i,int j)

;/*當前位置有解,下乙個位置*/

if(g_s[row][col] != 0)

/*都有解了,成功*/

else

/*當前位置有解,直接回溯*/

return;

}/*當前位置無解*/

else

/*當前位置已有解且沒有下乙個了,結束*/

else}}

/*要向前回溯,則這個位置找到的解無效,回溯前清0*/

g_s[i][j] = 0;

//prt();

return;}}

int main()

經典數獨遊戲 數獨求解器 純C語言實現

心常樂數獨小遊戲 下面簡稱 本軟體 是一款windows平台下的數獨遊戲軟體。本軟體是開源 免費軟體。本軟體 使用純c語言編寫,mingw編譯,nsis打包。本軟體主要特性例如以下 支援 闖關模式 和 選關模式 支援 隨機生成遊戲 支援數獨遊戲提示 支援使用者對單元格做標記 提供超級工具 數獨求解器...

C語言實現9宮格數獨

1 簡介 這是乙個失敗的生成九宮格數獨的 希望自己以後有空的時候優化 2 實現 include stdio.h define false 0 define true 1 char buf 9 9 char numindex 3 3 char check num int x,int y 遍歷y座標上下...

c語言實現回文數

題目 輸入乙個數,判斷這個數是否是回文數,是的話返回true,否返回false。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。輸入示例1 輸入 121輸出 true輸入示例2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數思...