八皇后(Java實現)

2021-08-14 15:26:05 字數 2522 閱讀 5415

使用遞迴擺放每一行

main方法呼叫

輸出效果

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。計算機發明後,有多種計算機語言可以解決此問題。

1.建立乙個棋盤類

- 提供一些行 列屬性

- 提供乙個列印方法

- 提供一些清空方法

- 提供乙個判斷是否可以放置皇后的方法

2.每一行放置乙個「皇后」, 放置成功後就去下一行放置

- 當所有行都放置成功了 那麼就列印整個棋盤

- 如果需要放置皇后的那一行,沒法在任何乙個位置上放置「皇后」 則說明上一行所放置的皇后位置存在問題 上一行的皇后需要重新放置

class chess 

public

intgetcolsize()

public

int getchess()

public

chess()

@override

public string tostring()

}return sb.tostring();}}

/**

* 將rowindex開始的以下的所有的行都清空

* *@param rowindex

*/public

void

clearbelowrow(int rowindex) }}

/*** 重新初始化棋盤 將所有棋子清空

*/public

void

clear() }}

/**

* 判斷第i行 第j列 是否可以被放置

* *@param i

* 行的index

*@param j

* 列的index

*@return 是否可以被放置

*/public

boolean

canbeput(int rowindex, int colindex)

}// 2. 判斷第colindex列的每個元素是否有被放置過的

for (int i = 0; i < rowsize; i++)

}// 3.判斷對角線是否有被放置過的

int i1 = rowindex, j1 = colindex;

// 3.1.1 往左上方

while (i1 > 0 && j1 > 0)

} 右下方

i1 = rowindex;

j1 = colindex;

while (i1 < rowsize - 1 && j1 < colsize - 1)

}// 3.2.1 往右上方

i1 = rowindex;

j1 = colindex;

while (i1 > 0 && j1 < colsize - 1)

} 左下方

i1 = rowindex;

j1 = colindex;

while (i1 < rowsize - 1 && j1 > 0)

}return

true;

}

/**

* 落子 將皇后放置在rowindex行colindex列上

* *@param rowindex

* 行

*@param colindex

* 列

*/public

void

downpiece(int rowindex, int colindex)

/**

* 找尋當前行可以放置皇后的點

* *@param rowindex

* 哪一行

*@param chess

* 棋盤

*/public

static

void

putinrow(int rowindex, chess chess) else

}// 如果執行到這裡,表示當前行無法放置「皇后」

// 也就說明上一行放置了「皇后」的位置這時會導致下面的行無法再進行放置

// 因此上一行「皇后」的位置需要被重新放置}}

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

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

Java實現經典八皇后的問題

今天自己實現了八皇后的問題,其實 並不長,但是關於虛擬機器中怎樣實現的想了好長時間特別是紅色部分。現在還是有點不是很明白。如下,已經實現執行。public class eightqueen 檢查所放位子是否合法。public static boolean check int row for int ...

python實現八皇后

要求 在 8 8 的棋盤上,8 個皇后不在同行 同列 同對角線。1 定義衝突 def conflict state,nextx nexty len state for i in range nexty if abs state i nextx in 0,nexty i return true ret...