用最暴力的遞迴方式在所有可能的空間中尋找數獨的解法。試了一下,不管多難的數獨都能在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 因此它不是乙個回文數思...