POJ 1321 棋盘问题 (DFS)

POJ 1321 棋盘问题 (DFS)

先直接贴代码

#include<iostream>
#include<cstring>
#include<cstdio>

using namespace std;

char p[10][10];
bool vis[10];
int ans;
int n, k;

void dfs(int line, int num)
{
	if(num == k)
	{
		ans++;
		return;
	}
	if(line >= n)	return;
	for(int i = 0 ; i < n ; i++)
	{
		if(p[line][i] == '#' && vis[i])
		{
			vis[i] = false;
			dfs(line+1,num+1);
			vis[i] = true;
		}
	}
	dfs(line+1,num);
}
int main()
{
    while(1)
    {
    	scanf("%d%d",&n,&k);
        if(n==-1&&k==-1)	return 0;
        for(int i = 0 ; i < n ; i++)
	        for(int j = 0 ; j < n ; j++)
	            cin >> p[i][j];//scanf("%c",&p[i][j]);Why???
        ans = 0;
        memset(vis, true, sizeof(vis));
        dfs(0, 0);
        cout << ans << endl;
    }
    return 0;
}
透过泪水看到希望
原文地址:https://www.cnblogs.com/ronnielee/p/9495150.html