(一)
用回溯法構造數獨
#include #include #include #include #include using namespace std;
int sudu[9][9];
void sudu_print(int sudu[9])
cout << endl;
};}bool is_digital_sudu(int sudu[9], int i, int j)
for(int k = 0; k < 9; ++k)
int p = i / 3;
int q = j / 3;
for(int m = 3 * p; m < 3 * p + 3; ++m)
return true;
}int main()
int k = 0;
while(1) else if(is_digital_sudu(sudu, x, y))
}if(81 == k)
}return 0;
}
在linux下執行的話,先執行命令:g++ 檔名稱.cpp 然後假設程式沒有錯誤的話。那麼在該資料夾以下會自己主動生成乙個檔案:.out。
所以這個時候繼續在該資料夾下執行:
./a.out
(二)利用書上的置換的方法,簡單。
1 15 構造數獨
一 用回溯法構造數獨 include include include include include using namespace std int sudu 9 9 void sudu print int sudu 9 cout endl bool is digital sudu int sudu...
程式設計之美1 15 構造數獨
問題 構造乙個9 9的方格矩陣,玩家要在每個方格中,分別填上1至9的任意乙個數字,讓整個棋盤每一列 每一行以及每乙個3 3的小矩陣中的數字都不重複。首先我們通過乙個深度優先搜尋來生成乙個可行解,然後隨機刪除一定數量的數字,以生成乙個數獨。include include using namespace...
程式設計之美 1 15 構造數獨
1.15 構造數獨 數獨的棋盤,由9 9 81個小方格組成,數獨要求每一行 每一列 以及每乙個3 3的小矩陣中的數字都不重複 深度優先搜尋,回溯法 從 0,0 開始,沒有處理的呼叫函式獲取可能的取值,取乙個為當前值,搜尋下乙個個子,搜尋過程中,若出現某個格仔沒有可行值,則回溯,修改前乙個格仔的取值 ...