poj 1321 棋盘问题 (dfs)
2014-09-20 11:20
253 查看
链接:poj 1321
题意:给定n*n的棋盘, # 代表棋盘区域,可以放棋子,
.代表空白区域(不能放棋子),现要摆放k个棋子,求方案数.
要求:摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列
思路:因为任意两个棋子不能在同一行或同一列,可以逐行dfs,并对已访问的行标记
题意:给定n*n的棋盘, # 代表棋盘区域,可以放棋子,
.代表空白区域(不能放棋子),现要摆放k个棋子,求方案数.
要求:摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列
思路:因为任意两个棋子不能在同一行或同一列,可以逐行dfs,并对已访问的行标记
#include<stdio.h> #include<string.h> char s[10][10]; __int64 cnt; int sum,n,m,vis[10]; void dfs(int r) { int i,j; for(i=r+1;i<n;i++) //从该行往下dfs for(j=0;j<n;j++) if(s[i][j]=='#'&&!vis[j]){ sum++; vis[j]=1; //访问后标记为1 if(sum==m) cnt++; else dfs(i); sum--; //回溯 vis[j]=0; } } int main() { int i,j; while(scanf("%d%d",&n,&m)!=EOF){ if(m==-1&&n==-1) break; cnt=0; for(i=0;i<n;i++) scanf("%s",s[i]); for(i=0;i<n;i++) for(j=0;j<n;j++){ memset(vis,0,sizeof(vis)); //先初始化为0 if(s[i][j]=='#'){ //每找到一个可以放棋子的地方,就进行dfs sum=1; vis[j]=1; if(sum==m){ cnt++; continue; } dfs(i); } } printf("%I64d\n",cnt); } return 0; }
相关文章推荐
- poj 1321 -- 棋盘问题 (DFS)
- POJ 1321 棋盘问题(DFS深度优先搜索/回溯法)
- POJ 1321 棋盘问题类似八皇后 dfs搜索
- poj 1321 棋盘问题 DFS+回溯 回溯学习
- POJ 1321 棋盘问题 (dfs)
- POJ 1321 棋盘问题(DFS+回溯)
- POJ 1321 棋盘问题【从头练dfs】
- poj 1321 棋盘问题 (DFS )
- POJ 1321 棋盘问题 DFS
- poj 1321 棋盘问题(DFS)
- poj 1321 棋盘问题(dfs)
- poj 1321 棋盘问题(dfs)
- poj_1321_棋盘问题(DFS)
- poj 1321 棋盘问题 (dfs)
- POJ 1321 棋盘问题(状态压缩DP | DFS)
- POJ 1321 棋盘问题(DFS)
- POJ 1321-棋盘问题 简单搜索DFS
- (Relax DFS1.3)POJ 1321 棋盘问题(使用DFS来解决特定终点问题)
- poj 1321 棋盘问题 简单DFS
- poj 1321 :棋盘问题 (dfs)