티스토리 뷰

반응형

https://www.acmicpc.net/problem/9663

 

9663번: N-Queen

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 브루트포스 알고리즘
  • 백트래킹

 


 

⊙ 문제 접근 과정

 

좌표 코드를 만들고 아래로 내려가면서 탐색하는 코드를 구현해줬다.


 

⊙ 문제 풀이

 

#include <iostream>

using namespace std;

int N;
int result=0;
int chess[16][16];
int dy[3]= {-1,-1,-1};
int dx[3]= {-1,0,1};

int down(int y,int x) {
    for (int i=0;i<3;i++) {
        int ny=y;
        int nx=x;

        while(true) {
            ny = ny+dy[i];
            nx = nx+dx[i];

            if(nx <0 || nx>=N || ny<0 || ny>=N)
                break;
            if(chess[ny][nx]==1)
                return false;
        }
    }
    return true;
}

void tooo1(int j) {
    if(j==N) {
        result++;
        return;
    }
    for (int i=0;i<N;i++) {
        if(down(j,i) && chess[j][i]==0) {
            chess[j][i]=1;
            tooo1(j+1);
            chess[j][i]=0;
        }
    }
}

int main() {
    cin>>N;
    tooo1(0);
    cout << result;
}

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함