999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于精確覆蓋的應用算法研究

2018-02-27 13:29:44姜華林
電腦知識與技術 2018年35期

摘要:“百變方塊”是一款深受大眾喜愛的益智游戲,而求解“百變方塊”是精確覆蓋的一種典型應用案例。為求解“百變方塊”解集,該文深入研究了“百變方塊”的數據結構并設計了一種非回溯的有效算法,并用C#語言實現了該算法。

關鍵詞:百變方塊;精確覆蓋;回溯算法;非回溯算法

中圖分類號:TP302? ? ? ? ?文獻標識碼:A? ? ? ? 文章編號:1009-3044(2018)35-0061-02

Abstract: Asa popular puzzle game, the solution of "Puzzle Squares " is a typical application case of Exactcover. In order to solve the solution set of " Puzzle Squares ", this paper deeply studies the data structure of " Puzzle Squares " and designs a non-backtracking effective algorithm, which is implemented in C# programming language.

Key words:Puzzle Squares;Exactcover; backtracking algorithm; non-backtracking algorithm

1 背景

“精確覆蓋”是指在一個全集X中若干子集的集合為S,求S的子集S*,滿足X的每一個元素在S*中恰好出現一次。在計算機科學中,“精確覆蓋”問題是指找出滿足要求的一種覆蓋,或證明其不存在[1]。“百變方塊”是一款基于“精確覆蓋”問題的益智游戲,研究表明該問題一般可用回溯算法[2]求解。該游戲在6*6的單元表格中進行,6*6的單元表格中有8個單元表格為某種預定圖形,如“上”字圖形(圖1),另外有8個拼塊(也稱“骨牌”)(圖2),要用8個拼塊覆蓋圖1中所有空格,每個拼塊用且只用1次。

該文要對“百變方塊”游戲進行深入研究后用C#語言設計一種自動求解算法,要求該算法有效且正確。

2 數據結構設計

精心設計的數據結構可讓算法更加高效[3]。主要的數據結構是8個整型數組,其中3個一維數組,5個二維數組:

1) int[] picPlace = new int[8],拼塊放置標識(最終位置索引),分為:Z形、T形、2W*2W形、L形、短L形、1W*2W形、1W*4W形、1W*3W形,初始值為-1;

2) int[] picStyleNo = new int[8],下標表示拼塊大類(如Z形為0),值表示相應大類的形態編號,標識當前所用形態編號,(如T形有4種,其形態編號為0、1、2、3);

3) int[,] computeArr = new int[6, 6],該數組是自動求解時是否可放拼塊的標識,-1表示不可放,0表示可放,1表示已放;

4) int[,] picPointState = new int[27, 4],在“百變方塊”中要使用的8個拼塊共有27種形態,每種形態用4個單元格表示其對應點索引的相對增量,如Z形為0、1、7、8時表示若第0點在某個位置,則其他三點相應增量為1、7、8;

5) int[,] picType = new int[8, 8],拼塊對應形態數組,每種拼塊最多有8種形態,最少有1種形態,其值對應picPointState的索引;

6) int[,]picPointLocation = new int[8, 8],標識某種形態拼塊的放置位置,行下標表示拼塊大類(如Z形為0),列下標表示拼塊相應大類的形態編號,值表示所放置的索引位置(行*6+列);

7) int[] picPlaceStyle = new int[8],答案數組,拼塊大類放置的對應形態編號,和picPlace聯合使用,下標表示拼塊大類(如Z形為0),值表示所放置的對應形態編號picPointState;

8) int[,] picPlaceRecord = new int[8, 8],用于標識某拼塊某形態編號是否成功放置過。

3 算法設計

3.1 算法功能描述

把8個拼塊全部放置到空白表格中,每個拼塊用且只用1次同時使得空白表格完全覆蓋。

3.2 算法設計步驟

“百變方塊”自動求解算法步驟如下:

1) i、j皆取值0;

2) 嘗試放置第i個拼塊的第j種形態;

3) 放置成功執行4),否則跳轉5);

4) i為最后1個拼塊,跳轉9),否則i加1、j=0跳轉2);

5) j為當前拼塊的最后一形態則執行6),否則j加1后執行2);

6) 若i為0跳轉8),若i不為0但沒有位置可放置執行7),否則跳轉8);

7) i減1、j=0改變其他位置嘗試;

8) 還有嘗試位置跳轉2),否則跳轉10);

9) 保存解后改變嘗試位置,跳轉1);

10) 退出。

3.3 算法核心代碼

“百變方塊”自動求解算法源碼(C#)如下:

public string NonBackTrackAll(){

while (iNo> -1) {

pFlag = 0;k = picStyleNo[iNo];

for (; k < 8; k++){

if (rtFlag == 1)

if (iNo + 2 < 8) {

for (i = 0; i < 8; i++) picPointLocation[iNo + 2, i] = 0;

picStyleNo[iNo + 2] = 0; //此處取0表示k從0開始

}

if (picType[iNo, k] == -1) pFlag = 0; break; //跳出循環

i = picPointLocation[iNo, k] / 6; iTmp = i;

for (; i < 6; i++){

j = picPointLocation[iNo, k] % 6;

if (rtFlag == 1)if (picPlaceRecord[iNo, k] != -1) j++;

if (i != iTmp)j = 0;

for (; j < 6; j++){

iPSNo = picType[iNo, k];

if (CheckPointsIfCanPlace(iPSNo, i, j)) {

if (CheckPointsIfAway(iPSNo, i, j)) {

FlagPointsPlace(iPSNo, i, j);

if (CheckIsolatedPoints(iPSNo, i, j) != -1)

CancelFlagPointsPlace(iPSNo, i, j);

else{

picStyleNo[iNo] = k;

picPlaceStyle[iNo] = iPSNo;

picPointLocation[iNo, k] = i * 6 + j;

picPlace[iNo] = i * 6 + j;pFlag = 1;

picPlaceRecord[iNo, k] = i * 6 + j;

picTotal++;

if (picTotal == 8) {

string str1 = "";string str2 = "";

int t0;

for (t0 = 0; t0 < 8; t0++){

str1 += picPlaceStyle[t0].ToString() + ",";

str2 += picPlace[t0].ToString() + ",";

}

gameAnswerData.Add(str1 + "-" + str2);

str += str1 + "-" + str2 + "\r\n";

picTotal—;

CancelFlagPointsPlace(iPSNo, i, j);

picPlace[iNo] = -1; pFlag = 0;

}

k = 8;i = 6;break;

} } }}}}

if (pFlag == 1) {

if (iNo + 1 < 8) {

for (i = 0; i < 8; i++)picPointLocation[iNo + 1, i] = 0;

picStyleNo[iNo + 1] = 0;

}

rtFlag = 0;iNo++;

}

else{

if (iNo> 0) {iPSNo = picType[iNo - 1, picStyleNo[iNo - 1]];

row = picPlace[iNo - 1] / 6; col = picPlace[iNo - 1] % 6;

CancelFlagPointsPlace(iPSNo, row, col);

picPlace[iNo - 1] = 0; picTotal—; }

rtFlag = 1; iNo—;

}} return str; }

4 實例測試

利用該文算法進行實例自動求解應用舉例如圖3:

由此可見,該算法是有效的;通過檢驗該算法所給答案也是正確的。

參考文獻:

[1] 精確覆蓋問題[EB/OL].https://baike.baidu.com/item/精確覆蓋問題/15668873.

[2] 姜華林.數獨問題高效算法的研究與實現[J].計算機光盤軟件與應用,2013,6(12):82-83.

[3] 嚴蔚敏,吳偉民.數據結構[M].2版.北京:清華大學出版社,2011.

[通聯編輯:謝媛媛]

主站蜘蛛池模板: 青青青草国产| 欧美高清三区| 在线播放精品一区二区啪视频| 99偷拍视频精品一区二区| 国产精品手机视频一区二区| 国产极品美女在线播放| 亚洲AⅤ综合在线欧美一区| 精品久久久久成人码免费动漫| 国产精品美人久久久久久AV| 国产天天射| 真实国产精品vr专区| 久久亚洲日本不卡一区二区| 国产乱视频网站| 欧美国产日韩在线| 啪啪免费视频一区二区| 国内a级毛片| 国产欧美在线| 亚洲男人天堂网址| 伊伊人成亚洲综合人网7777| 亚洲精品成人片在线观看| 亚洲中文无码av永久伊人| 手机精品福利在线观看| 一边摸一边做爽的视频17国产| 亚洲三级影院| 中文字幕丝袜一区二区| 青青国产视频| 国产精品私拍在线爆乳| 国产欧美在线观看视频| 亚洲欧美天堂网| 亚洲热线99精品视频| 9久久伊人精品综合| 欧美一级片在线| 狠狠色婷婷丁香综合久久韩国| 中国一级毛片免费观看| 色综合久久无码网| 一本一道波多野结衣一区二区 | 久久久久久久久18禁秘| 国产一区二区三区在线观看视频| 美女毛片在线| 欧美日韩国产系列在线观看| 男女男免费视频网站国产| 无码又爽又刺激的高潮视频| 无码粉嫩虎白一线天在线观看| 伊人91视频| 国产在线高清一级毛片| 97国产一区二区精品久久呦| 巨熟乳波霸若妻中文观看免费| 欧美a级在线| 国产成人综合在线视频| 另类综合视频| 免费大黄网站在线观看| 精品国产Av电影无码久久久| 国产精品va免费视频| 国产精品成人AⅤ在线一二三四 | 在线观看国产黄色| 日韩成人在线网站| 亚洲天堂在线视频| 国产高清又黄又嫩的免费视频网站| 亚洲欧洲日本在线| 国产18在线播放| 日本国产精品一区久久久| 亚洲精品午夜无码电影网| 亚洲日韩日本中文在线| 一级毛片在线免费视频| 久久综合五月婷婷| 亚洲香蕉久久| 无码国内精品人妻少妇蜜桃视频| 思思99思思久久最新精品| 99久久精彩视频| 欧美精品亚洲精品日韩专区| 精品伊人久久久久7777人| 人人看人人鲁狠狠高清| 伊人久久大香线蕉成人综合网| 亚欧乱色视频网站大全| 丝袜久久剧情精品国产| 日韩福利视频导航| 国内精品自在欧美一区| 玖玖免费视频在线观看| 欧美性天天| 欧美不卡视频在线观看| 五月婷婷丁香综合| 欧美日韩资源|