99爱爱,专区,国产激情毛片,国产成人,中文无码A片久久同性,最近中文字幕高清字幕免费mv,国产精品黄页免费高清在线观看

問答

N皇后問題的回溯法求解屬于子集樹還是排列樹 詳細講一講

提問者:okiek9597442016-06-19 00:00

N皇后的算法求解用的是子集樹的算法框架,但是可以只憑這個就確定嗎? 希望能詳細講一講。還有子集樹跟排列樹都舉幾個例子。謝謝。

最佳答案

“八皇后”問題遞歸法求解 (Pascal語言) 八皇后問題是一個古老而著名的問題,是回溯算法的典型例題。該問題是十九世紀著名的數(shù)學家高斯1850年提出:在8X8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。1854年在柏林的象棋雜志上不同的作者發(fā)表了40種不同的解,后來有人用圖論的方法解出92種結果,F(xiàn)代教學中,把八皇后問題當成一個經(jīng)典遞歸算法例題。 算法分析:數(shù)組a、b、c分別用來標記沖突,a數(shù)組代表列沖突,從a[0]~a[7]代表第0列到第7列,如果某列上已經(jīng)有皇后,則為1,否則為0;數(shù)組b代表主對角線沖突,為b[i-j+7],即從b[0]~b[14],如果某條主對角線上已經(jīng)有皇后,則為1,否則為0;數(shù)組c代表從對角線沖突,為c[i+j],即從c[0]~c[14],如果某條從對角線上已經(jīng)有皇后,則為1,否則為0;另優(yōu)化:第一個皇后在1~4格,最后*2,即為總解數(shù) } program queens; var a:array [1..8] of integer; b,c,d:array [-7..16] of integer; t,i,j,k:integer; procedure print; begin t:=t+1; write(t,': '); for k:=1 to 8 do write(a[k],' '); writeln; end; procedure try(i:integer); var j:integer; begin for j:=1 to 8 do {每個皇后都有8種可能位置} if (b[j]=0) and (c[i+j]=0) and (d[i-j]=0) then {判斷位置是否沖突} begin a:=j; {擺放皇后} b[j]:=1; {宣布占領第J行} c[i+j]:=1; {占領兩個對角線} d[i-j]:=1; if i<8 then try(i+1) {8個皇后沒有擺完,遞歸擺放下一皇后} else print; {完成任務,打印結果} b[j]:=0; {回溯} c[i+j]:=0; d[i-j]:=0; end; end; begin fillchar(a,sizeof(a),0); {初始化數(shù)組} fillchar(b,sizeof(b),0); fillchar(c,sizeof(c),0); fillchar(d,sizeof(d),0); try(1);{從第1個皇后開始放置} end. “八皇后”問題遞歸法求解 (C語言) #i nclude "stdio.h" static char Queen[8][8]; static int a[8]; static int b[15]; static int c[15]; static int iQueenNum=0; //記錄總的棋盤狀態(tài)數(shù) void qu(int i); //參數(shù)i代表行 int main() { int iLine,iColumn; //棋盤初始化,空格為*,放置皇后的地方為@ for(iLine=0;iLine<8;iLine++) { a[iLine]=0; //列標記初始化,表示無列沖突 for(iColumn=0;iColumn<8;iColumn++) Queen[iLine][iColumn]='*'; } //主、從對角線標記初始化,表示沒有沖突 for(iLine=0;iLine<15;iLine++) b[iLine]=c[iLine]=0; qu(0); return 0; } void qu(int i) { int iColumn; for(iColumn=0;iColumn<8;iColumn++) { if(a[iColumn]==0&&b[i-iColumn+7]==0&&c[i+iColumn]==0) //如果無沖突 { Queen[iColumn]='@'; //放皇后 a[iColumn]=1; //標記,下一次該列上不能放皇后 b[i-iColumn+7]=1; //標記,下一次該主對角線上不能放皇后 c[i+iColumn]=1; //標記,下一次該從對角線上不能放皇后 if(i<7) qu(i+1); //如果行還沒有遍歷完,進入下一行 else //否則輸出 { //輸出棋盤狀態(tài) int iLine,iColumn; printf("第%d種狀態(tài)為:
",++iQueenNum); for(iLine=0;iLine<8;iLine++) { for(iColumn=0;iColumn2)this.width=screen.width/2" vspace=2 border=0>; } printf("

"screen.width/2)this.width=screen.width/2" vspace=2 border=0>; } //如果前次的皇后放置導致后面的放置無論如何都不能滿足要求,則回溯,重置 Queen[iColumn]='*'; a[iColumn]=0; b[i-iColumn+7]=0; c[i+iColumn]=0; } } } 八皇后的c語言解法: #include #include #include int n,k,a[20],num=0; int attack(int k){ int flag=0; int i=1; while ((i");} else { for (i=1;i"); getch(); }

回答者:wd1000062016-06-21 00:00

相關問題

  • 關于汽車加油常見問題詳解

    我發(fā)現(xiàn)成為車主后出現(xiàn)的問題會有很多,接下來我們就來說說有關于汽車加油的幾個常見的問題。加92號還是95號好呢?92號與95號本質上有什么區(qū)別呢?其實區(qū)別主要在抗爆性,95號汽油的抗爆性比92號強,抗爆性越強,發(fā)動機的點火

    提問者:qwe79397922016-10-08

  • 關于新西蘭自駕游過程中給汽車加油問題

    新西蘭加油站很多,但我還是建議保證起碼半箱油,因為好幾百里見不到加油站的情況也是常有的。還有大城市油價會較便宜,越往南越貴。新西蘭一般是91號汽油和柴油,自駕所開的汽車就加91號汽油。99%加油站都是自助加油,輸入需要加

    提問者:halleyshi2016-07-25

  • javascript遞歸回溯法解八皇后問題

    下面給大家分享的是回溯法解八皇后, 帶詳細注解,這里就不多廢話了。 function NQueens(order) { if (order < 4) { console.log('N Quee

    提問者:hiqistyle2016-04-19

  • 用回溯法求砝碼問題C++

    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596

    提問者:pin123pin2016-05-12

  • 回溯法求N皇后問題時間復雜度是不是O(n^n)

    沒有那么多,就是不加斜線約束,由于不能同行同列,因此也最多只是O(n!)

    提問者:symnBallflumn2013-09-11

  • 用遞歸回溯法設計旅行售貨員問題的算法?

    一、回溯法: 回溯法是一個既帶有系統(tǒng)性又帶有跳躍性的的搜索算法。它在包含問題的所有解的解空間樹中,按照深度優(yōu)先的策略,從根結點出發(fā)搜索解空間樹。算法搜索至解空間樹的任一結點時,總是先判斷該結點是否肯定不包含問題的解。

    提問者:gh1616162013-06-21

車友關注

最新標簽

按字母分類:
ABCDEFGHIJKLMNOPQRSTWXYZ0-9