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

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

一、8皇后問題的分析   

 

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

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

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

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

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

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

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

二、8皇后問題的算法  

 

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

    procedure Place(k)

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

    個全程數(shù)組,進入此過程時已置了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 //對所有的行執(zhí)行以下語句//

    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) //是,打印這個數(shù)組//

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

    endif

    else kßk-1 "回溯"

    endif

    repeat

    end nqueens

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

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

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

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

 因此不受限結(jié)點的估計數(shù)大約只是8皇后狀態(tài)空間樹的結(jié)點總數(shù)的2.34%。

[動畫]

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

評論:
# re: 經(jīng)典算法(5)---8—皇后問題 2007-06-22 23:25 | pass86
記得以前學習的時候用了回溯的算法。  回復(fù)  更多評論
  
# re: 經(jīng)典算法(5)---8—皇后問題 2007-06-22 23:45 | 星夢情緣
我有回溯算法的,不過沒發(fā)上來  回復(fù)  更多評論
  
# re: 經(jīng)典算法(5)---8—皇后問題 2007-06-26 17:36 | 匿名
可以改進一下,用4個全局的數(shù)組分別存放8行、8列、兩種斜線各15條上是否已經(jīng)放了皇后。 每放置或取走一個皇后,都改一下這四個數(shù)組。這樣判斷是否能放,4個條件就夠了,不用循環(huán)。  回復(fù)  更多評論
  
# re: 經(jīng)典算法(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 /*定義數(shù)組的大小*/
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;
}
  回復(fù)  更多評論
  
# re: 經(jīng)典算法(5)---8—皇后問題 2008-08-31 17:22 | LM
學習,謝謝  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品国产无天堂网2021| 最新亚洲电影| 欧美中文在线观看| 欧美在线视频a| 久久精品中文字幕一区| 久久精品国产精品亚洲精品| 欧美一区二区三区喷汁尤物| 欧美在线观看天堂一区二区三区| 久久精品99国产精品| 久久亚洲视频| 欧美激情一区二区三区在线 | 国产精品日韩高清| 国产香蕉97碰碰久久人人| 一区二区视频在线观看| 亚洲精品在线二区| 亚洲在线成人| 久色成人在线| 日韩视频国产视频| 久久国产黑丝| 欧美三级网址| 在线观看一区二区精品视频| 亚洲少妇一区| 欧美成人免费大片| 亚洲欧美日韩在线观看a三区| 久久综合九色欧美综合狠狠| 国产精品成av人在线视午夜片| 国产一区二区电影在线观看 | 亚洲日本免费| 欧美一级视频精品观看| 亚洲福利视频网| 香蕉久久夜色精品| 欧美午夜精品一区| 亚洲国产成人高清精品| 亚洲综合首页| 亚洲国产精品一区二区久 | 免费人成精品欧美精品| 国产精品成人在线| 亚洲精品1区| 久久久久久久久久看片| 日韩亚洲视频在线| 免费在线国产精品| 狠狠做深爱婷婷久久综合一区| 宅男噜噜噜66一区二区| 另类av导航| 欧美一区二区精美| 国产精品久久久免费| 一卡二卡3卡四卡高清精品视频 | 久久国产手机看片| 这里只有精品电影| 欧美视频在线观看免费网址| 亚洲乱码国产乱码精品精| 欧美大色视频| 老司机aⅴ在线精品导航| 黑人操亚洲美女惩罚| 久久久久国产精品厨房| 亚洲欧美另类在线观看| 久久久一区二区| 美女91精品| 免费人成网站在线观看欧美高清| 亚洲欧美怡红院| 国产伦精品一区二区三区视频孕妇| 亚洲一区二区欧美| 亚洲午夜在线观看视频在线| 国产精品jvid在线观看蜜臀 | 久久久综合免费视频| 午夜电影亚洲| 国内伊人久久久久久网站视频| 久久久亚洲高清| 浪潮色综合久久天堂| 亚洲美女福利视频网站| 亚洲精品视频免费在线观看| 欧美区二区三区| 亚洲欧美激情四射在线日| 亚洲影视在线播放| 国产亚洲一区在线| 欧美国产精品中文字幕| 欧美国产视频一区二区| 亚洲婷婷国产精品电影人久久| 亚洲视频精品在线| 国内精品久久久久久影视8| 美女成人午夜| 国产精品sm| 毛片av中文字幕一区二区| 免费一级欧美在线大片| 中文在线一区| 新狼窝色av性久久久久久| 在线观看福利一区| 日韩一二三区视频| 国语自产精品视频在线看8查询8| 亚洲缚视频在线观看| 国产精品海角社区在线观看| 久久夜色精品国产噜噜av| 欧美国产一区二区| 午夜影院日韩| 免费在线成人av| 欧美专区18| 欧美日韩成人在线播放| 久久婷婷国产麻豆91天堂| 欧美日韩一区二区三区四区五区 | 午夜亚洲精品| 亚洲精品视频在线观看免费| 午夜精品成人在线| av成人老司机| 久久亚洲私人国产精品va| 亚洲欧美日韩另类精品一区二区三区| 久久久久久色| 久久国产精品黑丝| 欧美色网一区二区| 亚洲第一精品影视| 激情婷婷久久| 亚洲欧美日韩专区| 亚洲一区二区日本| 欧美激情精品| 亚洲高清一二三区| 尤物视频一区二区| 欧美一二三视频| 亚洲欧美日本在线| 欧美日韩国产另类不卡| 亚洲精品少妇网址| 久久乐国产精品| 久久国产精品久久久久久久久久 | 欧美黑人在线观看| 久久综合久久综合九色| 国产三级精品三级| 午夜精品久久久久久久久| 亚洲女人天堂成人av在线| 欧美久久久久久久久久| 欧美激情国产日韩精品一区18| 国模精品一区二区三区| 欧美一区二区成人6969| 午夜精品久久久久久久99樱桃| 欧美日韩国产一级| 亚洲人成人一区二区在线观看| 亚洲国产精品久久久久秋霞蜜臀| 久久精品麻豆| 久久性天堂网| 亚洲第一精品在线| 久久中文字幕一区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲女人天堂成人av在线| 国产精品成人一区二区三区吃奶 | 亚洲成人资源网| 亚洲乱码国产乱码精品精天堂| 巨乳诱惑日韩免费av| 亚洲国产另类 国产精品国产免费| 亚洲国产视频直播| 免费国产一区二区| 亚洲第一精品福利| 一本不卡影院| 国产精品中文字幕欧美| 久久久99免费视频| 亚洲国产欧美另类丝袜| 亚洲天堂av图片| 国产乱码精品一区二区三区五月婷 | 性做久久久久久| 美女网站在线免费欧美精品| 亚洲精品一线二线三线无人区| 欧美精品七区| 亚洲性视频网站| 久久综合国产精品| 一本久道久久久| 国产日韩欧美综合精品| 免费视频一区| 一区二区日韩| 久久人人爽爽爽人久久久| 亚洲精品人人| 国产日韩精品一区二区浪潮av| 久久久精彩视频| 9人人澡人人爽人人精品| 久久久久久久久岛国免费| 一区二区高清在线| 韩国一区二区三区美女美女秀| 欧美国产日本| 欧美亚洲自偷自偷| 91久久精品国产91性色tv| 欧美偷拍一区二区| 久久久久久久久一区二区| 日韩亚洲精品电影| 久久久久久电影| 亚洲一区二区精品| 在线日韩电影| 国产日本欧美视频| 欧美午夜电影在线| 欧美大片91| 久久久久国产免费免费| 亚洲一区二区日本| 亚洲日本黄色| 欧美福利一区二区三区| 久久精品综合网| 亚洲欧美日韩爽爽影院| 艳女tv在线观看国产一区| 在线国产欧美| 国内精品免费午夜毛片| 国产精品久久7| 欧美精品在线观看播放| 久久久久久久久岛国免费| 亚洲欧美日韩国产中文在线| 一区二区91| 亚洲免费福利视频| 亚洲激情网站|