![]() |
8queens puzzle
[기타]
작성일시 : 2017. 06. 09 (00:15)
|
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人


