您的位置:首页 > 其它

POJ1321 棋盘问题(dfs)

2016-01-25 21:45 381 查看
题目链接

基础题,一行一行的摆下来,从第一行开始,枚举所有情况,摆放好棋子后,该棋子摆放的列就用vis标记,不能再放置棋子

代码如下:

#include <cstdio>
#include <cstring>

int n, k, ans, sum, vis[10];
char map[10][10];

void dfs(int x)
{
if(sum == k)
{
ans++; return;
}
if(x >= n) return;
else
{
for(int i = 0; i < n; i++)
{
if(map[x][i] == '#' && vis[i] == 0)
{
vis[i] = 1; sum++;
dfs(x+1);
vis[i] = 0, sum--;
}
}
}
dfs(x + 1);
}

int main()
{
while(scanf("%d%d", &n, &k) && n != -1 && k != -1)
{
for(int i = 0; i < n; i++)
{
scanf("%s", map[i]);
}
memset(vis, 0, sizeof(vis));
sum = 0, ans = 0;
dfs(0);
printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: