POJ1312 棋盤問題 BFS

2021-07-24 04:48:13 字數 624 閱讀 4533

#include

#include

char

map[15][15];

int visit[15];

int n,k;

int ans;

void dfs(int x,int c)

for(i = x;i < n;i++)

for(j = 0;j < n;j++)

if(!visit[j]&&map[i][j] == '#')

}int main()

return0;}

這道題目類似n皇后問題,與之不同的是每一行不一定有棋盤,所以dfs裡要注意不一定是當前行。

思路很簡單,只需從第一行第乙個開始搜尋,如果該位置該列沒被標記且為棋盤,那麼在這裡放上棋子,並標記,因為每行每列不能衝突,所以搜尋下一行,比並且棋子數加1。每次搜尋之前先要判斷是否棋子已經用完,如果用完,記錄方案數加1,然後直接返回。直到所有搜尋全部完成,此時已得到全部方案數。

此題還需注意標記陣列僅僅標記某一列上是否有棋子,因為每次遞迴下一行,所以每一行不會有衝突,只需判斷這一列上是否有其他棋子。還要注意修改標記後遞迴回來要及時復原。

//之前由於將 i,j定義在了外面,導致了不知名的錯誤

poJ 1312(棋盤問題)

入門搜尋題,題意是 在不完整的的棋盤上面放若干棋子,求共有多少種使每行列至多只有一顆棋子的擺法 很容易想到採用dfs搜尋遍歷所有可行組合.include includeint n,k,ans char str 10 10 bool vis 10 10 int dfs int x int y int ...

POJ 1312 棋盤問題(經典DFS 入門題)

time limit 1000ms memory limit 10000k total submissions 68007 accepted 32399 description 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同...

1312 棋盤問題

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