poj 1321(簡單的dfs,棋盤問題)

2021-08-20 08:56:20 字數 963 閱讀 9891

poj1321鏈結

題意就是有乙個n*n的棋盤,只有#能放棋子,而且每一橫行縱行只能同時存在乙個棋子。問擺起方案。

棋盤問題應該算是簡單的dfs中的典型吧,吐一句槽,剛寫這一題的時候以為是只有"."才能放棋,debug了半天。。才發現題目看錯了。

關於做法,首先把棋盤用乙個字元陣列存起來,然後由於每一橫行縱行只能存在唯一棋子,所以我們只需要討論縱行的情況。

用乙個布林陣列來判斷該步是否走過,即可,由於資料很小所以也不用考慮剪枝。

//#include#include#includeusing namespace std;

const int n = 2e5 + 7;

const int m = 1e3 + 7;

const int q = 1000000007;

const int inf = 0x3f3f3f;

typedef long long ll;

typedef double dl;

int n,k,t,ans = 0;

bool a[9]; // 儲存該橫行是否走過

char chess[9][9]; // 儲存棋盤

void dfs(int cnt,int row) // cnt表示已放棋子數,row表示當前橫行

if(row >= n) return ; // 防止棧溢位

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

}dfs(cnt,row + 1); // 不走當前橫行

}int main()

return 0;

}

感覺跟n皇后問題差不多的。。。

棋盤問題 ( POJ 1321 )(簡單DFS)

題目鏈結 題解 dfs入門,就是每個點都搜尋一下,什麼時候夠了k個就ans include include include include include include include include using namespace std int n,k int ans 0 int step 0...

POJ 1321 棋盤問題(簡單DFS)

題目傳送門 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。input 輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,用乙個空格隔...

棋盤問題 ( POJ 1321 )(簡單DFS)

題目鏈結 題解 dfs入門,就是每個點都搜尋一下,什麼時候夠了k個就ans include include include include include include include include using namespace std int n,k int ans 0 int step 0...