版权声明:希望能帮到弱校的ACMer成长,因为自己是弱校菜鸡~~~~ https://blog.csdn.net/Mr__Charles/article/details/82117962
POJ T1321 棋盘问题
题解:
八皇后的变题,不规则的棋盘,没接触过的可以先去看下八皇后这个经典问题,推荐一个大牛的博客:地址
一开始想改八皇后的源码,发现好麻烦,借鉴了下别人的写法,还是比较菜......
代码:
#include<cstdio>
#include<iostream>
using namespace std;
int n,k,ans;
char maps[9][9];
struct visit{
int row,col;
}vis[9];
void init(){
ans = 0;
for(int i = 0; i < n; ++i){
vis[i].row = false;
vis[i].col = false;
}
}
void Dfs(int row,int st){
if(st == k)
ans++;
else{
for(int i = row+1; i < n; ++i){
for(int j = 0; j < n; ++j){
if(!vis[i].row && !vis[j].col && maps[i][j] == '#'){
vis[i].row = vis[j].col = true;
Dfs(i,st+1);
vis[i].row = vis[j].col = false;
}
}
}
}
}
int main(){
while(~scanf("%d%d",&n,&k)&&(n+k) != -2){
init();
for(int i = 0; i < n ; ++i)
scanf("%s",&maps[i]);
Dfs(-1,0);
printf("%d\n",ans);
}
return 0;
}