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