青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-48  評論-259  文章-1  trackbacks-0

一、8皇后問題的分析   

 

8皇后問題實際上很容易一般化為n-皇后問題,即要求找出在一個n*n棋盤上放置n個皇后并使其不能互相攻擊的所有方案。令(x1,x )表示一個解,其中x 是把第i個皇后放在第i行的列數。由于沒有兩個皇后可以放入同一列;因此這所有的xi將是截然不同的。那么應如何去測試兩個皇后是否在同一條斜角錢上呢? 

    如果設想:棋盤的方格像二維數組a(1:n,1:n)的下標那樣標記,那么可以看到,對于在同一條斜角線上的由左上方到右下方的每一個元素有相同的行一列值,同樣,在同一條斜角線上的由右上方到左下方的每一個元素則有相同的+列值。假設有兩個皇后被放置在(i,j)和(k,1)位置上,那么根據以上所述,僅當

        i-j=k-1或i+j=k+1

時,它們才在同一條斜角線上。將這兩個等式分別變換成

       j-1=i-k 和 j-1=k-i

因此,當且僅當|j一1|=|ik|時,兩個皇后在同一條斜角線上。

    過程Place(k)返回一個布爾值,當第k個皇后能放置于x(k)的當前值處時,這個返回值為真。這個過程測試兩種情況,即x(k)是否不同于前面x(1),x(k-1)的值以及在同一條斜角線上是否根本就沒有別的皇后。該過程的計算時間是

二、8皇后問題的算法  

 

[算法]: 可以放置一個新皇后嗎?   [動畫]

    procedure Place(k)

    //如果一個皇后能放在第k行和x(k)列,則返回.true;否則返回false。x是

    個全程數組,進入此過程時已置了k個值。abs(r)過程返回r的絕對值//

    global x(1:k);integer i;k

    iß1

    while i<k do

    if x(i)=x(k) //在同一列有兩個皇后//

    or abs(x(i)-x(k))=abs(i-k) //在同一條斜角線上//

    then return(false)

    endif

    ißi+1

    repeat

    return(true)

    end Place

使用過程Place來改進以上算法給出的一般回溯方法,可得出下面求n皇后問題正確解的算法。

   [算法]: n皇后問題的所有解   [動畫]

    procedure nqueens(n)

    //此過程使用回溯法求出在一個n*n棋盤上放置n個皇后,使其不能互相攻擊

    的所有可能位置//

    integer k,n,x(1:n)

    x(1)ß0;kß1 //k是當前行;x(k)是當前列//

    whilek>0 do //對所有的行執行以下語句//

    x(k)ßx(k)+1 //移到下一列//

    while x(k)n and not Place(k) do //此處能放這個皇后嗎/

    x(k)+x(k)+1

    repeat

    ifx(k)n //找到一個位置//

    then if k=n //是一個完整的解嗎//

    thenprint(x) //是,打印這個數組//

                  elsek<--k+1;x(k)+0 //轉向下一行//

    endif

    else kßk-1 "回溯"

    endif

    repeat

    end nqueens

    此時,讀者可能對于過程nqueens怎么會優于硬性處理感奇怪。原因是這樣的,如果硬

性要求一個8*8的棋盤安排出8塊位置,就有 種可能的方式,即要檢查將近4.4*10 個8元組。然而過程nqueens只允許把皇后放置在不同的行和列上,因此至多需要作81次檢

查,即至多只檢查40320個8元組。

可以用過程estimate來估算nqueens所生成的結點數。要指出的是,過程estimate所需要的假定也適用于nqueens,即,使用固定的限界函數且在檢索進行時函數不改變。另外,在狀態空間樹的同一級的所有結點都有相同的度。圖44.8顯示了由過程estimate求結點估計數所用的五個8x8棋盤。如同所要求的那樣,棋盤上每一個皇后的位置是隨機選取的。對于每種選擇方案,都記下了可以將一個皇后合法地放在各行中列的數目(即狀態樹的每一級沒受限的結點數)。它們都列在每個棋盤下方的向量中。向量后面的數字表示過程estimate由這些量值所產生的值。這五次試驗的平均值是1625。8皇后狀態空間樹的結點總數是

 因此不受限結點的估計數大約只是8皇后狀態空間樹的結點總數的2.34%。

[動畫]

posted on 2007-06-21 22:21 星夢情緣 閱讀(6706) 評論(5)  編輯 收藏 引用 所屬分類: 算法分析

評論:
# re: 經典算法(5)---8—皇后問題 2007-06-22 23:25 | pass86
記得以前學習的時候用了回溯的算法。  回復  更多評論
  
# re: 經典算法(5)---8—皇后問題 2007-06-22 23:45 | 星夢情緣
我有回溯算法的,不過沒發上來  回復  更多評論
  
# re: 經典算法(5)---8—皇后問題 2007-06-26 17:36 | 匿名
可以改進一下,用4個全局的數組分別存放8行、8列、兩種斜線各15條上是否已經放了皇后。 每放置或取走一個皇后,都改一下這四個數組。這樣判斷是否能放,4個條件就夠了,不用循環。  回復  更多評論
  
# re: 經典算法(5)---8—皇后問題 2007-12-13 15:28 | jenny
// 八皇后2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "iostream.h"
#include "math.h"
#define NUM 8 /*定義數組的大小*/
int x[NUM+1];
int place(int k)
{
int i=1;
while(i<k)
{
if(x[i]==x[k]||abs(x[i]-x[k])==abs(i-k))
return 0;
i++;
}
return 1;
}
void nqueens(int n)
{
int k;
int t;
int d=1;
x[1]=0;k=1;
int tt=n/2;
while(k>0&&k<=n)
{
x[k]=x[k]+1;
{ while(x[k]<=n&&!place(k))
x[k]=x[k]+1;
if(x[k]<=n)
{
if((k==n)&&(n%2==0))
{ cout<<"輸出皇后 {"<<d<<"} 隊列"<<endl;
d++;
for(int i=1;i<NUM+1;i++)
printf("%5d",x[i]);
cout<<endl;
}
else {k++;x[k]=0;}
}
else k--;
}
}
}
int main(int argc, char* argv[])
{
nqueens(NUM);
return 0;
}
  回復  更多評論
  
# re: 經典算法(5)---8—皇后問題 2008-08-31 17:22 | LM
學習,謝謝  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区毛片| 欧美亚州韩日在线看免费版国语版| 久久精品首页| 欧美电影免费观看大全| 性色av一区二区三区红粉影视| 欧美特黄一级| 久久精品免费| 亚洲第一伊人| 亚洲一级二级在线| 亚洲先锋成人| 久久精品国产视频| 欧美高清在线播放| 亚洲精品之草原avav久久| 亚洲视频第一页| 久久精品国产欧美亚洲人人爽 | 亚洲精品视频在线看| 亚洲最快最全在线视频| 午夜亚洲激情| 久久久综合精品| 欧美成人精品| 国产日韩成人精品| 亚洲美女黄色| 影音先锋久久久| 亚洲欧洲一区二区天堂久久| 国产精品国产a| 美国成人毛片| 久久国产视频网| 欧美成人三级在线| 久久综合久久88| 亚洲天堂网站在线观看视频| 欧美在线亚洲综合一区| 中文在线不卡| 亚洲国内欧美| 久久国产欧美日韩精品| 欧美承认网站| 欧美福利网址| 欧美性jizz18性欧美| 欧美电影免费观看大全| 国产精品高潮视频| 欧美日韩蜜桃| 欧美精品亚洲精品| 久久在线视频在线| 国产精品大片wwwwww| 亚洲精选91| 久久久人成影片一区二区三区观看 | 欧美大片免费| 午夜精品福利在线| 亚洲欧美日韩一区二区三区在线| 欧美aa国产视频| 影音先锋亚洲一区| 亚洲清纯自拍| 亚洲人成网站在线观看播放| 久久精品系列| 免费观看在线综合色| 国产自产v一区二区三区c| 亚洲女人天堂成人av在线| 亚洲欧美中文另类| 亚洲精品久久嫩草网站秘色| 中文日韩在线| 午夜宅男久久久| 欧美色偷偷大香| 亚洲一区国产精品| 久久久久国色av免费观看性色| 一区二区日本视频| 国产精品久久久久久影视 | 亚洲精品免费在线观看| 亚洲人成啪啪网站| 欧美成人在线免费观看| 久久综合九色综合久99| 亚洲精品乱码| 欧美一二三区在线观看| 久久久久久97三级| 久久精品欧美| 亚洲国产成人久久综合一区| 亚洲成人自拍视频| 欧美日韩视频在线观看一区二区三区| 国产精品乱码一区二三区小蝌蚪| 国产色爱av资源综合区| 久久国产精品99国产| 久久久久国内| 国产精品v欧美精品v日韩精品| 亚洲男人的天堂在线观看| 先锋影音国产一区| 尤物九九久久国产精品的分类| 亚洲日本欧美日韩高观看| 久久久五月天| 国产精品综合久久久| 国产一区二区三区黄| 亚洲一区美女视频在线观看免费| 91久久精品一区二区三区| 亚洲激情成人| 国产拍揄自揄精品视频麻豆| 一区二区日韩| 好吊一区二区三区| 亚洲精品视频在线播放| 亚洲黄色一区二区三区| 国产精品免费电影| 欧美一区二区精美| 亚洲男女自偷自拍图片另类| 国产精品区一区二区三| 亚洲日韩欧美视频一区| 亚洲午夜久久久| 欧美日韩欧美一区二区| 免费观看成人www动漫视频| 亚洲一区二区三区四区五区午夜| 性欧美xxxx大乳国产app| 午夜在线观看免费一区| 亚洲一级黄色片| 亚洲欧美日韩专区| 日韩一二在线观看| 老**午夜毛片一区二区三区| 亚洲午夜视频在线观看| 日韩亚洲在线| 免费成人黄色av| 久久综合亚洲社区| 国产精品一区毛片| 在线成人性视频| 午夜精彩视频在线观看不卡 | 裸体歌舞表演一区二区| 中文久久乱码一区二区| 欧美国产视频日韩| 国产精品v欧美精品∨日韩| 牛牛国产精品| 国产一区二区三区奇米久涩| 一区二区三区四区五区精品| 亚洲日本免费| 欧美尤物巨大精品爽| 麻豆免费精品视频| 麻豆乱码国产一区二区三区| 国产日韩欧美视频| 亚洲午夜精品久久久久久app| 99国产精品久久久久久久久久| 久久婷婷人人澡人人喊人人爽| 久久精品中文字幕一区二区三区| 欧美午夜精品久久久久久久| 美女久久一区| 国产欧美91| 久久久久久久成人| 国产精品视频免费观看| 一区二区免费在线观看| 亚洲午夜一区二区| 欧美一区二区三区视频在线 | 国产日韩欧美电影在线观看| 亚洲一区二区高清| 性色av一区二区怡红| 久久福利视频导航| 久久久久一区二区| 国内揄拍国内精品久久| 久久久精品动漫| 国产欧美日韩另类视频免费观看| 欧美在线日韩精品| 日韩亚洲欧美成人| 亚洲国产高清在线观看视频| 国内精品久久久久影院色| 久久9热精品视频| 欧美 亚欧 日韩视频在线| 欧美福利视频在线| 亚洲一区在线观看视频| 欧美日韩中文另类| 久久久7777| 在线观看日韩www视频免费| 免费观看日韩av| 亚洲视频免费看| 欧美有码视频| 日韩小视频在线观看| 亚洲综合视频一区| 久久激情中文| 在线观看亚洲a| aa亚洲婷婷| 性伦欧美刺激片在线观看| 欧美精品一线| 蜜臀av一级做a爰片久久 | 欧美精品一区在线| 久久激五月天综合精品| 欧美高清视频一区二区| 亚洲三级免费| 在线欧美亚洲| 在线亚洲观看| 欧美日韩视频在线一区二区观看视频 | 亚洲一区在线免费| 欧美日韩视频在线第一区| 国产精品盗摄久久久| 国产精品一页| 亚洲欧美日韩系列| 中文日韩欧美| 狠狠网亚洲精品| 欧美视频你懂的| 久久久99爱| 一区二区三区**美女毛片| 老妇喷水一区二区三区| 亚洲欧美成人一区二区在线电影| 一区二区三区免费观看| 久久国产高清| 亚洲综合视频1区| 亚洲美女黄色| 久久亚洲精品中文字幕冲田杏梨| 午夜国产不卡在线观看视频| 亚洲第一伊人| 国产精品天美传媒入口| 欧美激情一区二区三区四区|