POJ 1321 棋盤問題 DFS

2021-07-05 17:29:13 字數 618 閱讀 7541

題目大意:給你乙個棋盤,要求你在這個棋盤上面放k個車,使得車兩兩不互相攻擊,問有多少種擺放方法

解題思路:我用的是二進位制,如果該位是0的話,表示該位不能放置

列舉的時候,每次找當前狀態的最後乙個1,然後依次列舉即可

找最後乙個1的方法是s & (-s)

#include

#include

using

namespace

std;

const

int n = 20;

char str[n];

int n, k, ans, all, statu[n];

void init()

ans = 0;

}void solve(int cur, int num, int s)

if(cur == n || n - cur + num < k)

return ;

int ss = (s & statu[cur]) & all;

while(ss)

solve(cur + 1, num, s);

}int main()

return

0;}

POJ 1321 棋盤問題(棋盤DFS)

棋盤問題 思路 分層查詢,逐行深搜。注意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...

POJ 1321 棋盤問題 DFS

題意 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。題解 include using namespace std define n 10 bo...

poj 1321 棋盤問題(DFS)

大概題意就是給你乙個棋盤,讓你放棋子,求在棋盤n n上的 放上k個棋子的所有情況的數目。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列。深搜可以搜尋出所有答案。直接看 include includebool chess 9 9 bool vis col 9 int n,k,ans void...