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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

八皇后问题 回溯法hdu2553

發(fā)布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 八皇后问题 回溯法hdu2553 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

N皇后問題

Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 29994????Accepted Submission(s): 13085


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


Input 共有若干行,每行一個正整數(shù)N≤10,表示棋盤和皇后的數(shù)量;如果N=0,表示結(jié)束。
Output 共有若干行,每行一個正整數(shù),表示對應(yīng)輸入行的皇后的不同放置數(shù)量。
Sample Input 1850
Sample Output 19210
Author cgf
Source

2008 HZNU Programming Contest

解題思路就不說了 代碼中說明主意點。。。

#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<cstdlib> #include<vector> #include<map> #include<list> #include<stack> #include<set> using namespace std;int n,tot=0,a[15],b[15],row;void dfs(int row)//遞歸搜索可行解,回溯法 {if(row==n)//當(dāng)row=n時,說明每一行的皇后都不沖突,即為可行解{tot++;return;}else {for(int i=0; i<n; i++){int flag=1;a[row]=i; //嘗試把第row行的皇后放在i列上for(int j=0; j<row; j++) //檢驗是否與前面已放好的皇后沖突{if(a[row]==a[j]||a[row]-row==a[j]-j||a[row]+row==a[j]+j)//注意點,也是理解點{//判斷之前的列有沒有放過,判斷對角線的位置有沒有放皇后,對角線沒什么公式,自己理解。flag=0;break;//跳出最內(nèi)層循環(huán)如果沖突,停止搜索,返回上一級遞歸回溯。回溯法高效的關(guān)鍵}}if(flag){dfs(row+1);//往下面一行繼續(xù)搜索}}} }int main() {for(int i=1; i<=10; i++)//之前就是沒有這一步預(yù)處理,所以TLE了 TT{tot=0;n=i;dfs(0);b[i]=tot;}while(~scanf("%d",&n),n){printf("%d\n",b[n]);} }

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的八皇后问题 回溯法hdu2553的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。