在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的n,求出有多少種合法的放置方法。
input
共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。
output
共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。
sample input
185sample output0
1解題思路:用dfs一行一行得進行擺放,x為當前行,n為總行數,用for迴圈來確定每一列,由於是一行一行得擺放所以不可能同行,只需要標記同列,與主對角線(左下到右上)平行的一條對角線上的行列和等於同乙個常數,副對角線(左上到右下)平行一條對角線行列差等於乙個常數,只不過會是負數,防止下標是負數我們可以進行+10,保證是乙個正數,利用這個性質來確定有沒有同行同列。9210
1 #include23int count=0;4
5bool ye[10],d1[50],d2[50];//
用於判斷對應豎行、主對角線、副對角線是否已經有棋
6bool check(int x,int
y)11
void dfs(int x,int
n)16
for(int i=0;i)22}
2324}25
intmain()
33return0;
34 }
HDU 2553 N皇后問題
題目 problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數...
DFS hdu2553 N皇后問題
直接搜尋就可以了 只是在標記陣列vis上可以作文章 vis 0 i 來標記x為i的是否已放了棋子 vis 1 i 來標記y為i的是否已放了棋子 vis 2 i 來標記x y為i的一斜行是否已放了棋子 vis 3 i 來標記x y n為i的是否已放了棋子 因為x y可能為負數,所以加上乙個n就不會出現...
HDU 2553 N皇后問題
復健。一題經典的回溯法,要打表。include define max n 11 int n,res int c max n ans max n void dfs int cur if flag dfs cur 1 int main int m while scanf d m m printf d n...