problem description
在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的n,求出有多少種合法的放置方法。
input
共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。
output
共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。
sample input
1850sample output
19210經典深搜了
#include
#include
intmap[20][20],cnt;int ans[20] = ,num,n;void
dfs(int x,int y)
//對8個方向進行搜尋 xx = x;yy = y; while(xx>0) map[xx--][yy]++; xx = x;yy = y; while(yy>0) map[xx][yy--]++; xx = x;yy = y; while(xx<=n) map[xx++][yy]++; xx = x;yy = y; while(yy<=n) map[xx][yy++]++; xx = x;yy = y; while(xx<=n && yy<=n) map[xx++][yy++]++; xx = x;yy = y; while(xx>0 && yy<=n) map[xx--][yy++]++; xx = x;yy = y; while(xx<=n && yy>0) map[xx++][yy--]++; xx = x;yy = y; while(xx>0 && yy>0) map[xx--][yy--]++; for(i=1;i<=n;i++) //恢復原樣 xx = x;yy = y; while(xx>0) map[xx--][yy]--; xx = x;yy = y; while(yy>0) map[xx][yy--]--; xx = x;yy = y; while(xx<=n) map[xx++][yy]--; xx = x;yy = y; while(yy<=n) map[xx][yy++]--; xx = x;yy = y; while(xx<=n && yy<=n) map[xx++][yy++]--; xx = x;yy = y; while(xx<=n && yy>0) map[xx++][yy--]--; xx = x;yy = y; while(xx>0 && yy<=n) map[xx--][yy++]--; xx = x;yy = y; while(xx>0 && yy>0) map[xx--][yy--]--;}void
set()
ans[i] = num; }}int
main
() return
0;}
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!
problem description
在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的n,求出有多少種合法的放置方法。
input
共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。
output
共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。
sample input
1850sample output
19210經典深搜了
#include
#include
intmap[20][20],cnt;int ans[20] = ,num,n;void
dfs(int x,int y)
//對8個方向進行搜尋 xx = x;yy = y; while(xx>0) map[xx--][yy]++; xx = x;yy = y; while(yy>0) map[xx][yy--]++; xx = x;yy = y; while(xx<=n) map[xx++][yy]++; xx = x;yy = y; while(yy<=n) map[xx][yy++]++; xx = x;yy = y; while(xx<=n && yy<=n) map[xx++][yy++]++; xx = x;yy = y; while(xx>0 && yy<=n) map[xx--][yy++]++; xx = x;yy = y; while(xx<=n && yy>0) map[xx++][yy--]++; xx = x;yy = y; while(xx>0 && yy>0) map[xx--][yy--]++; for(i=1;i<=n;i++) //恢復原樣 xx = x;yy = y; while(xx>0) map[xx--][yy]--; xx = x;yy = y; while(yy>0) map[xx][yy--]--; xx = x;yy = y; while(xx<=n) map[xx++][yy]--; xx = x;yy = y; while(yy<=n) map[xx][yy++]--; xx = x;yy = y; while(xx<=n && yy<=n) map[xx++][yy++]--; xx = x;yy = y; while(xx<=n && yy>0) map[xx++][yy--]--; xx = x;yy = y; while(xx>0 && yy<=n) map[xx--][yy++]--; xx = x;yy = y; while(xx>0 && yy>0) map[xx--][yy--]--;}void
set()
ans[i] = num; }}int
main
() return
0;}
HDU2553 N皇后問題(DFS)
problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...
HDU2553 N皇后問題(dfs)
description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結...
HDU 2553 N皇后問題 (DFS 回溯)
problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...