HDU2553 N皇后問題 DFS

2021-09-10 15:08:40 字數 3121 閱讀 5451

problem description

在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。

你的任務是,對於給定的n,求出有多少種合法的放置方法。

input

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

output

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

sample input

1850 

sample 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

1850 

sample 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,表示棋盤和皇后的數量 如...