POJ 1321 바둑판 문제

Description
주어진 모양 의 바둑판 (모양 이 불규칙 할 수 있 음) 위 에 바둑 알 을 놓 으 면 바둑 알 은 차이 가 없다.배치 할 때 임의의 두 개의 바둑 알 을 바둑판 의 같은 줄 이나 같은 열 에 놓 을 수 없습니다. 주어진 모양 과 크기 의 바둑판 에 대해 K 개의 바둑 알 을 배치 할 수 있 는 모든 실행 가능 한 배치 방안 C 를 프로 그래 밍 하 십시오.
Input
여러 그룹의 테스트 데 이 터 를 입력 하 십시오. 
각 조 데이터 의 첫 줄 은 두 개의 정수, n k 로 빈 칸 으로 나 누 어 n * n 의 행렬 에서 바둑판 을 묘사 하고 바둑 알 을 놓 는 수 를 나타 낸다.n <= 8 , k <= n 
- 1 - 1 일 때 입력 이 끝 났 음 을 표시 합 니 다. 
다음 n 줄 은 바둑판 의 모양 을 묘사 했다. 줄 마다 n 개의 문자 가 있 는데 그 중에서 \ # 는 바둑판 구역 을 나타 낸다. 공백 구역 을 나타 낸다 (데 이 터 는 불필요 한 공백 줄 이나 공백 열 이 나타 나 지 않도록 보증한다). 
Output
각 그룹의 데이터 에 대해 한 줄 의 출력, 출력 배치 방안 의 수량 C (데이터 보증 C < 2 ^ 31) 를 드 립 니 다.
Sample Input
2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1

Sample Output
2
1
DFS    
LANGUAGE:C
CODE:
#include<stdio.h>
char s[10][10];
int col[10]={0},ans;
int n,m;
void dfs(int a,int b)
{
	int i;
	if(b<0)return ;
	if(a==n)
	{
		if(b==0)
		ans++;
		return ;
	}
	for(i=0;i<n;i++)
	{
		if(!col[i]&&s[a][i]!='.')
		{
			col[i]=1;
			dfs(a+1,b-1);
			col[i]=0;
		}
	}
	dfs(a+1,b);
}
int main()
{
	int i;
	while(scanf("%d%d",&n,&m),n!=-1||m!=-1)
	{
		for(i=0;i<n;i++)
		scanf("%s",s[i]);
		ans=0;dfs(0,m);
		printf("%d
",ans); } return 0; }

좋은 웹페이지 즐겨찾기