HDU 1321棋盤問題 DFS

2021-10-08 13:19:05 字數 683 閱讀 8813

1. 思路:

①。 固定每一行,只需要判斷每一列是否符合條件即可,用乙個vis陣列來表示每一列是否被訪問。

②。因為要求是放k個棋子。所以cnt == k時return。

③。dfs中,當訪問當前所有的列後,如果滿足(總行數 - 已經過的行數 >= k - cnt),那麼可以在該行不放置棋子,考慮下一行,cnt不增加。

2.乙個要注意的點:

就是可以擺放的位置是'#',不是'.',我當時也懵了。以後一定要細心吶。

#include using namespace std;

int n, k, ans;

char chess[10][10];

bool vis[10];

void dfs(int r, int cnt)

if (r == n)

/*訪問當前行所有的列*/

for (int i = 0; i < n; i++)

} /* 如果下一行滿足條件,則本行不擺放棋子,考慮下一行是否擺放棋子。*/

if (n - 1 - r >= k - cnt) }

int main()

ans = 0;

dfs(0, 0);

cout << ans << endl;

} 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...