這道題簡直是恥辱啊,居然被嚇得不敢做,終於開始寫還犯下了各種低級錯誤,花了好久的時間。
其實如果想明白81*9其實是很小的規模的話,早就想到用回溯法了,這不是跟八皇後完全一樣的嘛。每次填入的時候,驗證一下合不合理,其中合不合理在上一個問題中已經討論過了,對當前位置討論更簡單。
所的頭頭是道,你會問“那你是錯在哪呢?”你猜啊。我在判斷一個小方格時候合理時,走了很多彎路。一開始想的是用循環和減法,找到當前位置所在的小方格最左上角的位置。其實完全不用啊親,當聽到實驗室的同學說3*(i/3)和3*(j/3)直接就是時,我眼淚都掉下來了,蠢爆了。還有,在判斷board上的字符等不等於當前字符p時,我居然寫出了board[i][j]=='p'這種驚天地泣鬼神的代碼,給自己跪了。p傳進去的就是字符格式了,在數獨的棋盤上到哪找等於‘p’的位置啊。。
class Solution { public: int MAX = 9; bool flag = false; bool isValide(vector> &board, char p, int i, int j){ for(int k=0;k > &board, int pos){ if(pos == 81) {flag = true; return;} int i=pos/MAX, j=pos%MAX; if(isdigit(board[i][j])){ fileSudo(board, pos+1); }else{ for(char p='1';p<='9';p++){ //cout< > &board) { fileSudo(board, 0); } };