您的位置:首页 > 编程语言 > C语言/C++

POJ 1321 C++ : 棋盘问题

2016-12-30 16:26 281 查看

思路:

1.DFS逐行的搜索,定义vis数组记录某一列上是否已经有棋子存在,每次行数加1迭代,最后别忘了搜索完一行都没有放棋子的情况
2.特别注意:输入的时候用getchar读入一行,然后存入字符数组中
#include <stdio.h>
#include <iostream>
using namespace std;
int n;
int k;
int ans=0;
int vis[9];
char a[9][9];
int num;
void Dfs(int idx){
if(num==k){ans++;return;}
if(idx>n)return;
int i;
for(i=1;i<=n;i++){
if(vis[i]==0&&a[idx][i]=='#'){
vis[i]=1;
num++;
Dfs(idx+1);
vis[i]=0;
num--;
}
}
Dfs(idx+1);

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