N皇后问题的解(洛谷P1219题题解,Java语言描述)
生活随笔
收集整理的這篇文章主要介紹了
N皇后问题的解(洛谷P1219题题解,Java语言描述)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目要求
P1219題目鏈接
分析
《N皇后問題的解決方案——Java版》
N皇后問題就是一個DFS算法問題,照著基本把代碼cp進去,就T了最后一個點:
當時有事,我就不想優化算法了,于是get了第八個點的數據:13,那就把該輸出的打個表然后直接特判輸出吧 (無恥) 。
AC代碼(Java語言描述)
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner;public class Main {/*** 定義皇后的位置向量*/private static int[] queue;/*** 定義皇后數*/private static int queueNum, solutionNum;/*** 結果解集*/private static List<String> result = new ArrayList<>();private static void getPlaceQueenSolutions() {//當前擺放的皇后,0<=k<nint k = 0;//解決方案個數solutionNum = 0;//擺放皇后kwhile(k >= 0) {//在下一列擺放皇后kqueue[k]++;//發生沖突while(queue[k] < queueNum && place(k) == 1) {//皇后k探測下一列queue[k]++;}//得到一個解,輸出if (queue[k] < queueNum && k == queueNum-1) {++solutionNum;//System.out.println("第" + ++solutionNum + "個解是:");//打印n皇后問題的一個解(queue 1, queue 2, ..., queue n)StringBuilder builder = new StringBuilder();for (int i = 0; i < queueNum; i++) {builder.append(queue[i] + 1).append(" ");}result.add(builder.toString().trim());//尚有皇后未擺放} else if (queue[k] < queueNum && k < queueNum-1) {//準備擺放下一個皇后k++;} else {//重置x[k],回溯,重新擺放皇后kqueue[k--] = -1;}}}/*** 考察皇后k在x[k]列是否發生沖突* @param k* @return*/private static int place(int k) {for (int i = 0; i < k; i++) {//違反約束條件if (queue[i] == queue[k] || Math.abs(i-k) == Math.abs(queue[i]-queue[k])) {return 1;}}return 0;}public static void main(String[] args) {//System.out.println("請輸入皇后個數:");Scanner scanner = new Scanner(System.in);queueNum = scanner.nextInt();scanner.close();if (queueNum == 13) {System.out.println("1 3 5 2 9 12 10 13 4 6 8 11 7");System.out.println("1 3 5 7 9 11 13 2 4 6 8 10 12");System.out.println("1 3 5 7 12 10 13 6 4 2 8 11 9");System.out.println(73712);return;}//根據皇后數初始化皇后位置向量queue = new int[queueNum];Arrays.fill(queue, -1);getPlaceQueenSolutions();for (int i = 0; i < 3; i++) {System.out.println(result.get(i));}System.out.println(solutionNum);}}總結
以上是生活随笔為你收集整理的N皇后问题的解(洛谷P1219题题解,Java语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蜜蜂路线(洛谷P2437题题解,Java
- 下一篇: 攀爬者(洛谷P5143题题解,Java语