POJ 1321 - 棋盘问题

DFS

 

 

本题的大意是:

在一个 矩形 的棋盘里放棋子要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,要求根据棋盘的大小和放置棋子的位置,求出可行方案的个数。


图中“ # ”  表示可放棋子的位置

         “ . ”   表示空白的位置


AC代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n,k,ans;
char map[10][10];
int flag[10];
void dfs(int x,int y)
{
	int i;
	if(y==k)
	{
		ans++;
		return;
	}
	if(x>=n)
        return;
    for(i=0;i<n;i++)   // 在x行放置棋子
	{
        if(flag[i]==0 && map[x][i]=='#')
		{
			flag[i]=1;
			dfs(x+1,y+1);
			flag[i]=0;
		}
	}
	dfs(x+1,y);  //  在x行不放置棋子
}

int main()
{
	int i;
	while(scanf("%d%d",&n,&k), n!=-1 && k!=-1)
	{
		for(i=0;i<n;i++)
		scanf("%s",map[i]);
		ans=0;
		memset(flag,0,sizeof(flag));
		dfs(0,0);
		printf("%d\n",ans);
	}
	return 0;
}


你可能感兴趣的:(POJ 1321 - 棋盘问题)