POJ 1321 棋盤問題

#include<cstdio> #include<cstring> using namespace std; char chess[10][10]; bool book[10];//記錄此列有無被放置棋子 int n,k,num,way; void dfs(int row){ if(num==k){ way++; return; } if(row>=n) return;//從0開始 for(int col=0;col<n;col++){ if(!book[col]&&chess[row][col]=='#'){ num++; book[col]=true; dfs(row+1); book[col]=false;//此時此節點的枝葉已經被搜索完畢,重置 num--; } } dfs(row+1);//逐行放置棋子,遍歷圖表 } int main(){ while(~scanf("%d %d",&n,&k)&&n!=-1){ way=num=0; memset(book,false,sizeof(book)); memset(chess,'.',sizeof(chess)); for(int i=0;i<n;i++) scanf("%s",&chess[i]); dfs(0); printf("%d\n",way); } return 0; }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章