POJ T1321 棋盘问题

版权声明:希望能帮到弱校的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;
}

猜你喜欢

转载自blog.csdn.net/Mr__Charles/article/details/82117962