文章最後有總結。和展望。
void perm(int list, int s, int e) ; //對list[s]——list[e]進行全排列
void move1(int list,int a,int b)
void move2(int list,int a,int b)
void perm(int list, int s, int e)
for (int i=s; i <= e; i++) }
void shuffle(int arr)
}int initial(int i, int j, int start)
return(1);
}if (j == 8)
else
j++;
initial(i, j, 8);
return 1;
}if (k == 0)
else
j--;
line[i][data[i][j]-1] = 0;
column[j][data[i][j]-1] = 0;
block[i/3*3+j/3][data[i][j]-1] = 0;
}while (data[i][j] == b[0]);
initial(i, j, data1[i][j] -1);
return 1;
}}//for
}int main()
for(int i=0;i<=362878;i++)
}int num=0;
for(int i=0;i<=362879;i++)
if(data_vessel[i][0][0]!=0) num++;
cout
for (i = 0; i < 9; i++)
system("pause");
}這篇文章得到的結論:用這篇文章的演算法(每個**本質上一樣,為了不同的目的做了寫修改)能生成一些有規律的終盤:
這裡指的一些到底有多少: 分兩種情況:形式不一的終盤可以生成 9!*12096*216=948109639680 約9481億個
本質不一的終盤可以生成 12096*216=2612736 約261萬個
演算法中每天橫帶產生乙個種子。每選乙個種子都有9!可能,當然這麼多可能肯定會產生重複的終盤,上面的計算是剔除重複的情況。
這種演算法生成的終盤量是很大的,但都有共同的規律,如果解題人解出題後發現了這個規律,能否推出三個種子我打文字時第一次開始考慮這個問題。第乙個種子是
不用推導,第二個種子和第三個種子如何推導,如果推導不了,能否寫個演算法全部列印到檔案?
還有個問題我之前就思考過,如果每填一行給個種子,或每兩行給個種子,終盤的生成數又如何算,顯然能生成的終盤更多。
構造數獨和解數獨
數獨,俗稱九宮格,由乙個9 9的網格組成,整個網格又分成9個3 3的小正方形網格,每個格仔有乙個數字 1 9 數獨滿足如下要求 1 每個數字在每一行只出現一次 2 每個數字在每一列只出現一次 3 每個數字在每個3 3的小區域中也只出現一次 如下圖所示,為我們比較常見的數獨形式,為乙個缺了數字的數獨,...
數獨問題 解數獨
數獨是乙個非常有名的遊戲。整個是乙個9x9的大宮格,其中又被劃分成9個3x3的小宮格。要求在每個小格中放入1 9中的某個數字。要求是 每行 每列 每個小宮格中數字不能重複。現要求用計算機求解數獨。輸入描述 輸入9行,每行為空格隔開的9個數字,為0的地方就是需要填充的數字。輸出描述 輸出九行,每行九個...
python 數獨 Python中的數獨檢查器
我正在嘗試用python建立乙個數獨檢查器 ill formed 5,3,4,6,7,8,9,1,2 6,7,2,1,9,5,3,4,8 1,9,8,3,4,2,5,6,7 8,5,9,7,6,1,4,2,3 4,2,6,8,5,3,7,9 7,1,3,9,2,4,8,5,6 9,6,1,5,3,7...