使用遞迴擺放每一行
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...