POJ1321棋盘问题

题目链接:传送门
分析:运用DFS,一开始就想到DFS但是一直都是一个一个遍历还设置了很多变量,结果不是WA就是超时,看了题解别人都是一行一行加的。。。自己真的菜的真实。。。
AC代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char c[10][10];
int vis[10];
int n,k;
int ans,total;
void dfs(int line) {

	if(k==total) {
		ans++;
		return;
	}
	if(line>=n)	return;
	for(int i=0; i<n; i++)
		if(vis[i]==0&&c[line][i]=='#') {
			vis[i]=1;
			total++;
			dfs(line+1); 
			vis[i]=0;
			total--;
		}

	dfs(line+1);
}
int main() {
	while(cin>>n>>k) {
		if(n==-1&&k==-1)	break;
		ans=0;
		total=0;

		for(int i=0; i<n; i++)
			cin>>c[i];
		memset(vis,0,sizeof(vis));
		dfs(0);
		cout<<ans<<endl;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值