亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#用遞歸算法解決八皇后問題

2020-01-24 01:06:23
字體:
來源:轉載
供稿:網友

1.引子

  中國有一句古話,叫做“不撞南墻不回頭",生動的說明了一個人的固執,有點貶義,但是在軟件編程中,這種思路確是一種解決問題最簡單的算法,它通過一種類似于蠻干的思路,一步一步地往前走,每走一步都更靠近目標結果一些,直到遇到障礙物,我們才考慮往回走。然后再繼續嘗試向前。通過這樣的波浪式前進方法,最終達到目的地。當然整個過程需要很多往返,這樣的前進方式,效率比較低下。

2.適用范圍

  適用于那些不存在簡明的數學模型以闡明問題的本質,或者存在數學模型,但是難于實現的問題。

3.應用場景

  在8*8國際象棋棋盤上,要求在每一行放置一個皇后,且能做到在豎方向,斜方向都沒有沖突。國際象棋的棋盤如下圖所示:

http://files.VeVB.COm/file_images/article/201606/201606151029091.jpg

4.分析

  基本思路如上面分析一致,我們采用逐步試探的方式,先從一個方向往前走,能進則進,不能進則退,嘗試另外的路徑。首先我們來分析一下國際象棋的規則,這些規則能夠限制我們的前進,也就是我們前進途中的障礙物。一個皇后q(x,y)能被滿足以下條件的皇后q(row,col)吃掉

1)x=row(在縱向不能有兩個皇后)

2)y=col(橫向)

3)col + row = y+x;(斜向正方向)

4)col - row = y-x;(斜向反方向)

遇到上述問題之一的時候,說明我們已經遇到了障礙,不能繼續向前了。我們需要退回來,嘗試其他路徑。

我們將棋盤看作是一個8*8的數組,這樣可以使用一種蠻干的思路去解決這個問題,這樣我們就是在8*8=64個格子中取出8個的組合,C(64,80) = 4426165368,顯然這個數非常大,在蠻干的基礎上我們可以增加回溯,從第0列開始,我們逐列進行,從第0行到第7行找到一個不受任何已經現有皇后攻擊的位置,而第五列,我們會發現找不到皇后的安全位置了,前面四列的擺放如下:

http://files.VeVB.COm/file_images/article/201606/201606151029092.png

第五列的時候,擺放任何行都會上圖所示已經存在的皇后的攻擊,這時候我們認為我們撞了南墻了,是回頭的時候了,我們后退一列,將原來擺放在第四列的皇后(3,4)拿走,從(3,4)這個位置開始,我們再第四列中尋找下一個安全位置為(7,4),再繼續到第五列,發現第五列仍然沒有安全位置,回溯到第四列,此時第四列也是一個死胡同了,我們再回溯到第三列,這樣前進幾步,回退一步,最終直到在第8列上找到一個安全位置(成功)或者第一列已經是死胡同,但是第8列仍然沒有找到安全位置為止

總結一下,用回溯的方法解決8皇后問題的步驟為:

1)從第一列開始,為皇后找到安全位置,然后跳到下一列

2)如果在第n列出現死胡同,如果該列為第一列,棋局失敗,否則后退到上一列,在進行回溯

3)如果在第8列上找到了安全位置,則棋局成功。

8個皇后都找到了安全位置代表棋局的成功,用一個長度為8的整數數組queenList代表成功擺放的8個皇后,數組索引代表棋盤的col向量,而數組的值為棋盤的row向

量,所以(row,col)的皇后可以表示為(queenList[col],col),如上圖中的幾個皇后可表示為:

queenList[0] = 0;  queenList[1] = 3;   queenList[2] = 1;  queenList[3] = 4;   queenList = 2;

我們看一下如何設計程序:

首先判斷(row,col)是否是安全位置的算法:

bool IsSafe(int col,int row,int[] queenList){ //只檢查前面的列 for (int tempCol = 0; tempCol < col; tempCol++) {  int tempRow = queenList[tempCol];  if (tempRow == row)  {   //同一行   return false;  }  if (tempCol == col)  {   //同一列   return false;  }  if (tempRow - tempCol == row - col || tempRow + tempCol == row + col)  {   return false;  } } return true;}

設定一個函數,用于查找col列后的皇后擺放方法:

/// <summary>/// 在第col列尋找安全的row值/// </summary>/// <param name="queenList"></param>/// <param name="col"></param>/// <returns></returns>public bool PlaceQueue(int[] queenList, int col){ int row = 0; bool foundSafePos = false; if (col == 8) //結束標志 {  //當處理完第8列的完成  foundSafePos = true; } else {  while (row < 8 && !foundSafePos)  {   if (IsSafe(col, row, queenList))   {    //找到安全位置    queenList[col] = row;    //找下一列的安全位置    foundSafePos = PlaceQueue(queenList, col + 1);    if (!foundSafePos)    {     row++;    }   }   else   {    row++;   }  } } return foundSafePos;}

調用方法:

static void Main(string[] args){ EightQueen eq = new EightQueen(); int[] queenList = new int[8]; for (int j = 0; j < 8; j++) {  Console.WriteLine("-----------------"+j+"---------------------");  queenList[0] = j;  bool res = eq.PlaceQueue(queenList, 1);  if (res)  {   Console.Write(" ");     for (int i = 0; i < 8; i++)   {    Console.Write(" " + i.ToString() + " ");     }   Console.WriteLine("");   for (int i = 0; i < 8; i++)   {    Console.Write(" "+i.ToString()+" ");          for (int a = 0; a < 8; a++)    {            if (i == queenList[a])     {      Console.Write(" q ");     }     else     {      Console.Write(" * ");     }    }    Console.WriteLine("");         }      Console.WriteLine("---------------------------------------");  }  else  {   Console.WriteLine("不能完成棋局,棋局失??!");  } } Console.Read();}

遞歸算法PlaceQueue,完成這樣的功能:它尋找第col列后的皇后的安全擺放位置,如果該函數返回了false,表示當前進入了死胡同,需要進行回溯,直到為0-7列都找

到了安全位置或者找遍這些列都找不到安全位置的時候終止。

用遞歸算法解決8皇后問題的示例程序:

http://xiazai.VeVB.COm/201606/yuanma/EightQueens(VeVB.COm).rar

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久91精品国产| 激情亚洲一区二区三区四区| 国产在线观看精品一区二区三区| 成人免费xxxxx在线观看| 欧美成人午夜激情视频| 国产精品吊钟奶在线| 精品成人69xx.xyz| 欧美夫妻性生活视频| 91精品国产91久久久久福利| 欧美日韩国产成人高清视频| 欧美成人精品h版在线观看| 欧美一区二区影院| 97香蕉久久超级碰碰高清版| 视频在线观看99| 亚洲精品自在久久| 这里只有精品视频在线| 亚洲free性xxxx护士白浆| 综合网日日天干夜夜久久| 黄网站色欧美视频| 久久久久久久国产精品视频| 91在线中文字幕| 91国产美女在线观看| 亚洲视频一区二区三区| 91色视频在线导航| 国产精品免费看久久久香蕉| 日韩乱码在线视频| 欧美亚洲免费电影| 夜夜狂射影院欧美极品| 欧美重口另类videos人妖| 亚洲电影第1页| 综合136福利视频在线| 成人免费淫片aa视频免费| 亚州欧美日韩中文视频| 国产精品第一区| 91精品在线国产| 中文字幕日韩有码| 国色天香2019中文字幕在线观看| 日韩国产高清污视频在线观看| 深夜福利国产精品| 日韩中文字幕在线播放| 色偷偷噜噜噜亚洲男人| 日韩在线观看你懂的| 91精品视频免费观看| 亚洲精品大尺度| 中文字幕综合一区| 亚洲综合在线小说| 亚洲欧美变态国产另类| 日韩免费高清在线观看| 17婷婷久久www| 亚洲综合视频1区| 亚洲激情在线观看视频免费| 日韩亚洲欧美中文在线| 久久亚洲成人精品| 久久香蕉国产线看观看av| 国内精品国产三级国产在线专| 亚洲人成在线观| 国产在线久久久| 久久理论片午夜琪琪电影网| 亚洲欧美一区二区激情| 欧美刺激性大交免费视频| 日韩成人av网| 欧美高跟鞋交xxxxxhd| 日韩免费高清在线观看| 久久亚洲私人国产精品va| 亚洲老头老太hd| 亚洲美女动态图120秒| 国产精品第三页| 欧美在线视频在线播放完整版免费观看| 午夜欧美大片免费观看| 欧美在线一级va免费观看| 日韩电影在线观看永久视频免费网站| 久久天天躁狠狠躁夜夜av| 91国产视频在线播放| 欧美激情一区二区三区久久久| 国产欧美va欧美va香蕉在线| 午夜免费在线观看精品视频| 国产精品久久久久av| 欧美性开放视频| 亚洲一区www| 最新69国产成人精品视频免费| 日韩精品福利在线| 日韩av在线网站| 欧美老女人性视频| 亚洲精品日韩在线| 黑人巨大精品欧美一区二区三区| 国产啪精品视频网站| 国产精品日日摸夜夜添夜夜av| 91精品在线观看视频| 欧美久久久精品| 亚洲欧洲偷拍精品| 国产精品久久久久久久久免费看| 欧美激情亚洲另类| 亚洲人av在线影院| 久久精品亚洲94久久精品| 国产欧美日韩精品专区| 欧美激情一级二级| 91精品久久久久久| 亚洲激情视频网站| 日本精品免费一区二区三区| 国内精品400部情侣激情| 久久伊人精品视频| 日韩欧美a级成人黄色| 久久精品国产69国产精品亚洲| 中文国产成人精品久久一| 日韩电影视频免费| 亚洲人成77777在线观看网| 亚洲视频在线播放| 成人激情综合网| 日韩免费高清在线观看| 欧美大片免费看| 国产精品91久久久| 欧美中文字幕视频在线观看| 色狠狠久久aa北条麻妃| 中文字幕日韩电影| 色天天综合狠狠色| 欧美人与物videos| 伊人成人开心激情综合网| 亚洲精品久久久久| xvideos国产精品| 欧美在线www| 中文字幕精品国产| 91精品国产91久久久久| 亚洲精品720p| 热久久免费视频精品| 欧美激情视频给我| 欧美理论电影在线观看| 国产成人高清激情视频在线观看| 久久久久久久爱| 亚洲色图校园春色| 国产人妖伪娘一区91| 国产999精品久久久| 国产亚洲精品日韩| 成人字幕网zmw| 色香阁99久久精品久久久| 国产一区二区视频在线观看| 成人情趣片在线观看免费| 日韩av影片在线观看| 国产精品高潮呻吟视频| 久久偷看各类女兵18女厕嘘嘘| 一区二区欧美激情| 亚洲欧美日韩中文视频| 国产精品久久久久免费a∨大胸| 国产性色av一区二区| 国产精品久久久久久久久免费| 97久久精品视频| 青草成人免费视频| 国产精品视频网站| 久久夜精品香蕉| 亚洲天堂免费视频| 欧美特黄级在线| 亚洲精品一区中文| 久久天堂av综合合色| www亚洲精品| 国产精品国产三级国产aⅴ浪潮| 97精品国产aⅴ7777| 秋霞午夜一区二区| 最近2019中文免费高清视频观看www99| 欧美在线免费看| 久久久久日韩精品久久久男男| 国产精品日日摸夜夜添夜夜av| 青青草一区二区| 国产亚洲视频在线观看| 国产玖玖精品视频| 亚洲欧美在线磁力|