您的位置:首页 > 其它

POJ1321(DFS)

2018-03-12 20:40 204 查看
题目链接

中文题。

便利每一行,分别有放和不放棋子两种情况,然后记录有哪些列放了棋子。然后DFS就好了。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
char s[9][9];
int n,m,ans;
int vis[9];
void dfs(int h,int num)
{
if(h > n)return;
if(num == m)
{
ans++;
return;
}
for(int i = 0; i < n; i++)
{
if(s[h][i] == '#' && !vis[i])
{
//printf("h = %d i = %d\n",h,i);
vis[i] = 1;
dfs(h + 1,num + 1);
vis[i] = 0;
}
}
dfs(h + 1,num);
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
if(n == m && n == -1)
break;
memset(s,0,sizeof s);
memset(vis,0,sizeof vis);
ans = 0;
for (int i = 0; i < n; i++)
scanf("%s",s[i]);
dfs(0,0);
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: