棋盤問題
思路:分層查詢,逐行深搜。
注意k < n時的處理。
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include棋盤問題7 #include 8 #include 9 #include 10
#define ll long long
11#define min(a,b) (a>b?b:a)
12#define max(a,b) (a>b?a:b)
13#define eps 1e-9
14#define inf 1 << 30
15using
namespace
std;
1617
intans;
18int
n, m;
19char map[10][10
];20
int vis[10
];21
22void dfs(int x, int
num)
2329
if(x >n)
30return;31
for(int i = 0; i < m; i++)
3239
}40 dfs(x+1, num); //
這裡是難點,當k41
//又由於當全部棋子都放好後的某個棋盤狀態已經在前面迴圈時記錄了
42//
因此為了處理多餘行,令當前位置先不放棋子,搜尋在下一行放棋子的情況
43return;44
}4546void
run()
4760 ans = 0
;61 dfs(0, 0
);62 printf("
%d\n
", ans);63}
64}6566
int main(void)67
POJ 1321 棋盤問題
time limit 1000ms memory limit 10000k total submissions 7007 accepted 3390 description 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列...
poj 1321 棋盤問題
棋盤問題 time limit 1000ms memory limit 10000k total submissions 15365 accepted 7600 description 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一...
POJ 1321 棋盤問題
找到第乙個有 的行開始回溯就可以了 include include using namespace std const int maxn 9 char board maxn maxn bool c maxn int ans,n,k void backtracking int curi,int cnt...