1、题目类型:模拟、DFS。

2、解题思路:类似八皇后问题的DFS。

3、注意事项:注意DFS内部剪枝,以提高运行时间效率。

4、实现方法:

#include<iostream>
using namespace std;

int n,k,num,ans;
bool map[9][9],col[9];

void DFS(int k)
{
int i;
if(k==0)
{
ans
++;
return;
}
if(num>=n)
return;
if(k>(n-num))
return;
num
++;
for(i=1;i<=n;i++)
{
if(!map[num][i])
continue;
if(col[i])
continue;
col[i]
=1;
DFS(k
-1);
col[i]
=0;
}
DFS(k);
num
--;
return;
}

int main()
{
char ch;
int i;
while(cin>>n>>k)
{
if(n==-1&&k==-1)
break;
memset(map,
0,sizeof(map));
memset(col,
0,sizeof(col));
ans
=0;
for(i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin
>>ch;
if(ch=='#')
map[i][j]
=1;
}
for(i=1;i<=n;i++)
{
num
=1;
if(!map[num][i])
continue;
if(col[i])
continue;
col[i]
=1;
DFS(k
-1);
col[i]
=0;
}
DFS(k);
cout
<<ans<<endl;
}
return 0;
}

 

相关文章:

  • 2021-12-20
  • 2021-06-20
  • 2022-12-23
  • 2021-09-29
  • 2022-02-04
  • 2021-11-09
  • 2021-10-24
猜你喜欢
  • 2021-09-05
  • 2021-07-11
  • 2021-08-27
  • 2021-09-10
  • 2021-09-20
相关资源
相似解决方案