八皇后問題 java實現,演算法兩則

2021-04-12 18:46:48 字數 1378 閱讀 2141

八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是19世紀著名的數學家高斯2023年提出:在8×8格的西洋棋盤上擺放8個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。[英國某著名計算機圖形影象公司面試題]

演算法1:典型的回朔演算法。列印出8皇后的最終排列。

解析:遞迴實現n皇后問題。

演算法分析:

陣列a、b、c分別用來標記衝突,a陣列代表列衝突,從a[0]~a[7]代表第0列到第7列。如果某列上已經有皇后,則為1,否則為0。

陣列b代表主對角線衝突,為b[i-j+7],即從b[0]~b[14]。如果某條主對角線上已經有皇后,則為1,否則為0。

陣列c代表從對角線衝突,為c[i+j],即從c[0]~c[14]。如果某條從對角線上已經有皇后,則為1,否則為0。

package org.luyang.csdn;

public class eightqueue

}public void prt()

system.out.println("");

}system.out.println("");

}/**

* set the queen of line i

* * @param i

*/void qu(int i)

// whatever how to put the queen, mission is impossible. rollback

rec[i][icolumn] = "○";

a[icolumn] = 0;

b[i - icolumn + 7] = 0;

c[i + icolumn] = 0;}}

}/**

* 8 queen

* @param args

*/public static void main(string args)

}演算法2,也不知道是從**剽竊過來的了,該演算法沒有最終答應出排列組合,僅僅給出有多少種組合,但是演算法確實十分奧妙,提供出來大家分享。

package org.luyang.csdn;

public class queen

} else

sum++;

}public static void main(string args)

system.out.println(n + " queens");

upperlim = (upperlim << n) - 1;

test(0, 0, 0);

system.out.println("number of solutions is " + sum + ", "

+ (system.currenttimemillis() - tm) + " milliseconds");}}

技術問題兩則

安裝oracle11g時,oracle sid設定成db 254的形式,會導致sqlplus登入時不方便,因此最好設定成export oracle sid db254的形式,以免引起不必要的麻煩。一小兄弟來電詢問,說keepalived做mysql的failover時,vip可以漂移,但mysql程...

技術問題兩則

安裝oracle11g時,oracle sid設定成db 254的形式,會導致sqlplus登入時不方便,因此最好設定成export oracle sid db254的形式,以免引起不必要的麻煩。一小兄弟來電詢問,說keepalived做mysql的failover時,vip可以漂移,但mysql程...

八皇后問題之回溯演算法實現 java實現》

package algorithm public class empress public boolean place int k return true 如果不是與之同一行同一列的或同一斜線上的棋子,返回true public void backtrace int t else public vo...