日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#,数独游戏(Sudoku Game)的算法与源代码

發布時間:2023/12/31 C# 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#,数独游戏(Sudoku Game)的算法与源代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文包括以下內容:
(1)數獨游戲的核心算法;
(2)數獨游戲核心算法的源代碼;
(3)數獨游戲的部分題目樣本;
(4)適老版《數獨》的設計原則及軟件免積分下載。

仔細讀完,必有收獲啦!
閱讀本文你就可以自己寫出數獨游戲軟件啦!

一、數獨游戲的核心算法

1、數獨的基本規則

數獨游戲的規則非常簡單,以9x9標準數獨為例:
(1)每行、列的9個格子由1--9數字填入,不得重復;
(2)9x9格子可劃分為9個3x3的不重復的塊(宮),每個3x3的塊(宮)的9個格子由1--9數字填入,不得重復;

2、數獨軟件

數獨軟件,包括三類:
(1)數獨題目生成器;
(2)數獨答題器(也有軟件含有(1)的功能);
(3)數獨題目解答器;

3、數獨題目生成器

數獨題目生成器就是按“需求”生成數獨的題目。
數獨題目的需求,包括但不限于:
(1)格子總數:4x4,6x6,9x9,16x16,25,25,...
(2)格子樣式:標準、異形(包括所謂的殺手數獨)等等;
(3)特殊要求:對角線、和值、大小等等;
(4)難度系數:一般而言是指剩余的數字數量。數量越少,難度越高。

數獨題目生成器又包括兩個比較大的步驟:
(1)生成包括全部數字的數獨題目;
(2)按難度系數挖去部分數字,使之稱為空格;
(*)最終的剩余數字與空格成為題目;

數獨題目的生成算法,主要兩種:
(1)Lasvegas算法,稱之為“賭徒算法”;本質就是隨機算法;
基本思路是:順序或隨機位置填入1-9之間的隨機數,嚴格遵守規則;

(2)Exchange算法,稱之為“交換算法”,以一個lasvegas生成的題目為基礎,
經過數字、行、列、塊(宮)、旋轉、對稱等等交換(就是矩陣交換啦),得到看起來是新的題目;
交換算法既可以用于全數字題目,也可以用于挖去空洞的最終題目。

4、挖洞算法

挖洞算法也有兩種:
(1)順序挖洞;
從左上角開始,消除數字(挖洞),但必須確保答案唯一!
(2)隨機挖洞;
隨機選擇位置,消除數字(挖洞),但必須確保答案唯一!

5、異型題目的生成


所有異型題目的生成,都是以標準題目生成為基礎的;比如:
(1)對角線數獨:實現在對角線填入隨機數字;
(2)殺手數獨:以一個完成的題目為基礎,左右上下可以一個塊為基礎,填入剩余數字即可;
(3)和值數獨:先生成題目,再隨機取部分相鄰的格子,計算其和值,并用一個虛線框標記即可;
(4)大小數獨:取獨立的兩個格子,判別其數字大、小,用箭頭繪制即可;
更多異形,也不過爾爾。

6、數獨題目生成器的流程圖

7、數獨答題器

數獨答題器是讀入數獨的題目,并顯示于界面,供玩家選擇或輸入數字的軟件。
數獨答題器的流程圖:

8、數獨題目解答器

數獨題目解答器是玩家或作弊者,用于輸入題目,并給出答案的軟件。

二、數獨游戲核心算法的源代碼

1、拉斯維加斯算法的源代碼

/// <summary> /// 賭徒法(美其名曰:回溯法,實際上是 Lasvegas 算法) /// 構造數獨矩陣 /// </summary> /// <returns></returns> public static Board LasVegas_Original(int N = 9) {int[,] array = new int[N, N];for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){array[i, j] = 0;}}// 生成一個隨機的不完整數獨矩陣// 1..N 個數覆蓋了 NxN 的部分點for (int i = 0; i < N; i++){int temp = rnd.Next() % (N * N);array[temp / N, temp % N] = i + 1;}// 構造數獨矩陣// 暴力試錯法,賭徒法,回溯法int k = 0;while (true){if (k < 0){k = 0;}int row = k / N;int column = k % N;while (true){array[row, column]++;if (array[row, column] > N){// 失敗!重試!array[row, column] = 0;--k;break;}else if (Is_Matched_Node(array, row, column)){++k;break;}}// 終于摸到一條大魚!if (k == (N * N)){return new Board(array);}} }

數獨規則檢驗代碼:?

/// <summary> /// 驗證array[row,column]是否符合要求 /// (1)每行、列不能重復! /// (2)每個塊內不能重復! /// </summary> /// <param name="array"></param> /// <param name="row"></param> /// <param name="column"></param> /// <returns></returns> private static bool Is_Matched_Node(int[,] array, int row, int column) {int N = array.GetLength(0);int M = (int)Math.Sqrt(N);int temp = array[row, column];// 列檢測for (int i = 0; i < N; i++){if (i != row && array[i, column] == temp){return false;}}// 行檢測for (int i = 0; i < N; i++){if (i != column && array[row, i] == temp){return false;}}// 塊檢測int p = (row / M) * M;int q = (column / M) * M;for (int i = p; i < p + M; i++){for (int j = q; j < q + M; j++){if (i != row && j != column && array[i, j] == temp){return false;}}}return true; }

2、挖洞程序的源代碼

暫略。

3、題目顯示的源代碼

public static string ToHtml(int[,] array) {int N = array.GetLength(0);int M = (int)Math.Sqrt(N);StringBuilder sb = new StringBuilder();sb.AppendLine("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");sb.AppendLine("<html xmlns=\"http://www.w3.org/1999/xhtml\" >"); sb.AppendLine("<style>");sb.AppendLine("* { -webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none; }");sb.AppendLine("td { user-select:none;width:45px;height:45px;line-height:45px;font-size:35px;padding:10px;text-align:center; }");sb.AppendLine("td.v { background-color:#FFEEEE; } ");sb.AppendLine("td.s { background-color:#EEEEEE;cursor:pointer; } ");sb.AppendLine("td.s:hover { background-color:#FFFFFF;cursor:pointer; } ");sb.AppendLine("</style>");sb.AppendLine("<body>");sb.AppendLine("<center>");sb.AppendLine("<table border=1 bordercolor='#AAAAAA' style='border-collapse:collapse;border:solid 3px #333333;'>");for (int i = 0; i < N; i++){if ((i % M) == 0)sb.AppendLine("<tr style='border-top:solid 5px #333333;'>");else if (i == (N - 1))sb.AppendLine("<tr style='border-bottom:solid 5px #333333;'>");elsesb.AppendLine("<tr>");for (int j = 0; j < N; j++){string tds = (array[i, j]==0) ? "s" : "v";if ((j % M) == 0)sb.AppendLine("<td style='border-left:solid 5px #333333;' class='"+tds+"'>");else if (j == (N - 1))sb.AppendLine("<td style='border-right:solid 5px #333333;' class='" + tds + "'>");elsesb.AppendLine("<td class='" + tds + "'>");if (array[i, j] > 0)sb.AppendLine(array[i, j]+"");else sb.AppendLine("");sb.AppendLine("</td>");}sb.AppendLine("</tr>");}sb.AppendLine("</table>");sb.AppendLine("</center>");sb.AppendLine("</body>");sb.AppendLine("</html>");return sb.ToString(); }

三、數獨題目樣本

9x9

(適老版《數獨》軟件內有10000套題目,可隨意選用!)?

16x16:

?以后補上更多樣本,比如:25x25...

四、適老版《數獨》的設計原則及軟件下載

《數獨》特別適合幼兒、老人進行智力開發與維護。這些玩家有一些特別的需求:
(1)字體要大!
(2)操作要簡單!最好不要敲鍵盤!
(3)難度級別要多一些,逐步培養興趣;
等等,不一而足。

北京聯高軟件開發有限公司秉承“用戶第一,用戶第二。”的原則開發了適老版《數獨》。


適老版《數獨》軟件經過《用于保護C#|Java源程序的深度混淆技術與軟件——DeepConfuser》混淆編譯而成。

用于保護C#|Java源程序的深度混淆技術與軟件——DeepConfuserhttps://blog.csdn.net/beijinghorn/article/details/123156464

下載鏈接(0積分):
0積分下載適老版《數獨》https://download.csdn.net/download/beijinghorn/85224898

聯高軟件可制作專門的《數獨》題目或訓練、競賽軟件(Y=)。

————————————————————————————

POWER BY TRUFFER.CN

總結

以上是生活随笔為你收集整理的C#,数独游戏(Sudoku Game)的算法与源代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。