您的位置:首页 > 其它

POJ 1321----棋盘问题(dfs+回溯)

2015-08-14 10:10 381 查看
#include<cstdio>
#include<cstring>
int n,k,cnt;
char g[10][10];
int used[10];    //用于放置棋子的列标记

void dfs(int row,int num)
{
int i;
if(num==k)  //当一种方式搜完后,方式加 1;
{
cnt++;
return;
}
if(row==n) return;  //当行数超过时,深搜结束。
for(i=0;i<n;i++)  //第row行i列放一个棋子
{
if(!used[i]&&g[row][i]=='#')
{
used[i]=1;
dfs(row+1,num+1);
used[i]=0;    //回收当前棋子
}
}
dfs(row+1,num);  //row这一行不放棋子
}
int main()
{
int i,j;
while(~scanf("%d%d",&n,&k))
{
if(n==-1&&k==-1) break;
for(i=0;i<n;i++) scanf("%s",g[i]);
memset(used,0,sizeof(used));
cnt=0;
dfs(0,0);
printf("%d\n",cnt);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: