您的位置:首页 > 其它

POJ 1321 棋盘问题 (dfs)

2012-04-07 11:04 344 查看
题目链接:~( ̄▽ ̄~)(~ ̄▽ ̄)~

水过~

code:

#include <stdio.h>
#include <string.h>
int n = 0, k = 0, sum = 0, count = 0,used[10];//用used来标记每列是否有棋子出现过
char map[10][10];
void dfs(int row)//传的是当前是第几行
{
int i = 0;
if(count == k)
{
sum++;
return ;
}
if(row>n)
return;
if(count+n-row+1<k)//如果说当前已确定的位置数量加上剩下要搜的行数小于k则剪枝
return ;
for(i = 0; i<=n; i++)
{
if(i == 0)
dfs(row+1);
else
{
if(map[row][i] == '#' && !used[i])
{
used[i] = 1;
count++;
dfs(row+1);
count--;
used[i] = 0;
}
}
}
}
int main()
{
int i = 0;
while(scanf("%d %d",&n,&k), n != -1 && k != -1)
{
memset(used,0,sizeof(used));
for(i = 1; i<=n; i++)
scanf("%s",map[i]+1);
sum = 0;
if(k == 0)
sum = 0;
else
dfs(1);
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: