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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HD_2553N皇后问题

發布時間:2025/3/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HD_2553N皇后问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

N皇后問題

Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 15462????Accepted Submission(s): 7021Problem Description

Problem Description
在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對于給定的N,求出有多少種合法的放置方法。



Input
共有若干行,每行一個正整數N≤10,表示棋盤和皇后的數量;如果N=0,表示結束。


Output
共有若干行,每行一個正整數,表示對應輸入行的皇后的不同放置數量。


Sample Input
1
8
5
0

Sample Output

1
92
10

?思路:

? ? ? 就是考慮皇后放置的位置,對于每一行,我們需要枚舉每個可以放置皇后的位置,
而且需要判斷當前位置(第i行)是否滿足條件,即判斷這個位置是否與放置好的前i-1行的皇后的位置相沖突,
如果沖突,說明這個位置不合適;否則的話,就可以枚舉下一行皇后的位置,直至第n行。

代碼中也有解釋,代碼如下:


#include<iostream> #include<cstdio> #include<cmath>using namespace std;int col[11],sum[11],n,s;bool place(int k){for(int i=1; i<k; ++i){// k既代表第幾個皇后又代表所在的行//在對角線上的皇后有一個特點就是所在行坐標和列坐標之差的絕對值相等//即所判斷的前者即為是否在相同對角線,后者為是否在同列//所以不用判斷是否在同一行,因為i<k if(abs(k-i)==abs(col[k]-col[i]) || col[k]==col[i] )return false;}return true; }void dfs(int a){if(a>n)s++;else{for(int i=1; i<=n; ++i){col[a]=i; //i代表列數,設置第a個皇后所在的列if(place(a))dfs(a+1);}} }int main(){int i,m;for(i=1; i<=10; ++i ){n=i; //設置皇后數量 s=0; //重新歸零 dfs(1); //從開始位置搜索 sum[i]=s; //記錄結果 }while(scanf("%d",&m) && m ){printf("%d\n",sum[m]);}return 0; } 題目連接: http://acm.hdu.edu.cn/showproblem.php?pid=2553

總結

以上是生活随笔為你收集整理的HD_2553N皇后问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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