주문토끼

8queens puzzle

[기타]
  • 조회 : 2,572 / 댓글 : 1

8 퀸 문제는 8x8크기의 체스판에 을 8개 배치하는 문제이다. 1848년 막스 베첼이 처음 제안하였다. 이 문제를 일반화하면 NxN 크기의 체스판에 을 N개 배치하는 N 퀸 문제가 된다. 구성적인 해법으로 N이 2,3인경우를 제외하고 해를 찾을 수 있다.


 

 

//c언어로 프로그래밍해서 해를 구해라는 과제 ㅂㄷㅂㄷ

// 코드시작

#include <stdio.h>

#define N  8

void Q_bt(char board[][N], int row);

void make_new_board(char board[][N], int row, int col, char newboard[][N]);

void Put_Q_X(char newboard[][N], int row, int col);

void print_board(char board[][N]);

int row = N, col = N;

char board[N][N], newboard[N][N];

int count = 0;

 

void main()

{

int i, j;

for (i = 0; i < N; i++) {

for (j = 0; j < N; j++) {

board[i][j] = 'O';

}

}

Q_bt(board, 0);

getchar();

 

}

void Q_bt(char board[][N], int row)

{

char newboard[N][N];

int col;

if (row == N - 1)

{

for (col = 0; col < N; col++)

if (board[row][col] == 'O') {

board[row][col] = 'Q';

printf("%d\n", ++count);

print_board(board);

}

return;

}

else

for (col = 0; col < N; col++) {

if (board[row][col] == 'O') {

make_new_board(board, row, col, newboard);

Q_bt(newboard, row + 1);

}

}

return;

}

void make_new_board(char board[][N], int row, int col, char newboard[][N])

{

int i, j;

for (i = 0; i < N; i++)

for (j = 0; j < N; j++)

newboard[i][j] = board[i][j];

Put_Q_X(newboard, row, col);

}

void Put_Q_X(char newboard[][N], int row, int col)

{

int i, j;

int rowtemp = row, coltemp = col;

for (i = 0; i < N; i++) newboard[i][col] = 'X';

for (j = 0; j < N; j++) newboard[row][j] = 'X';

while (row < N && col < N)

newboard[row++][col++] = 'X';

row = rowtemp; col = coltemp;

while (row >= 0 && col >= 0)

newboard[row--][col--] = 'X';

row = rowtemp; col = coltemp;

while (row >= 0 && col < N)

newboard[row--][col++] = 'X';

row = rowtemp; col = coltemp;

while (row < N && col >= 0)

newboard[row++][col--] = 'X';

row = rowtemp; col = coltemp;

newboard[rowtemp][coltemp] = 'Q';

}

void print_board(char board[][N])

{

int i, j;

 

for (i = 0; i < N; i++) {

for (j = 0; j < N; j++) {

printf("%c ", board[i][j]);

 

}

printf("\n");

}

printf("-------------------------------------\n");

}

 

 

//이상 과제및 기말고사 준비로 너무 화가난 1人

 

  • 비회원
  • 작성자
  • 비밀번호
  • 취소

대댓글 작성

비밀번호를 입력하세요.

비밀번호
토모키 2017. 06. 09 (12:50)06.09 (12:50)
뭔가 어려워보이는 문제네요