검색 단계 - 바둑판 문제

5534 단어 수색 하 다.
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82828#problem/A
 
바둑판 문제
Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u
Submit 
Status
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



CODE:
#include<iostream>

using namespace std;

#define N 10

int n, k, cou, visit[N] = {0};  // cou      , visit        
char maps[N][N]; //     

void DFS(int line, int t); // line     ,t         

int main()
{
    int i, j;

    while(1)
    {
        cin >> n >> k;

        if(n == -1 || k == -1)
            break;

        for(i = 0; i < n; i++)
            for(j = 0; j < n; j++)
                cin >> maps[i][j];

        cou = 0;

        DFS(0, 0); //   0   ,       0;

        cout << cou << endl;
    }
    return 0;
}

void DFS(int line, int t)
{
    if(t == k) //            k  ,cou   +1,      
    {
        cou++; 
        return ;
    }

    if(line >= n) //            return
        return;

    for(int i = 0; i < n; i++) //          ,       
    {
        if(visit[i] == 0 && maps[i][line] == '#')  //               ,            ,   +1,      
        {
            visit[i] = 1;
            DFS(line+1, t+1);
            visit[i] = 0; //                 0
        }
    }
    DFS(line+1, t); //             
}
 
   

®

 

 

좋은 웹페이지 즐겨찾기