日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

N皇后问题的解(洛谷P1219题题解,Java语言描述)

發布時間:2025/3/15 java 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。