Onnada · 게시글

8queens puzzle

카테고리: 기타2017-06-09 00:15조회 2602추천 2댓글 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人

 

전투력 115,152

댓글

이 게시판에 댓글을 쓸 권한이 없습니다.

2017-06-09 12:50
뭔가 어려워보이는 문제네요