비 귀속 구 해 N 황후 문제 (역 추적 법)
역 추적 법 은 광범 위 하 게 응용 되 는 알고리즘 이다.그 관건 은 공간 트 리 와 n 원조 의 실행 가능 한 정 의 를 푸 는 것 이다.
비 재 귀 소 거 법 프로그램의 구 조 는 대체적으로 같다. 이 프로그램의 구 조 는 여러 가지 유사 한 문 제 를 해결 할 수 있다. 예 를 들 어 그림 의 착색 문제 등 이다.
/*
* 【 】 8×8 8 ,
* “ ”, “
* ” ,
* ,
* 、 、 。
*
* ( ) 8
*
* MAXQUEEN , N 。
*
*/
#include <stdio.h>
#include <conio.h>
#define TRUE 1
#define FALSE 0
#define MAXQUEEN 4
#define ABS(x) ((x>0)?(x):-(x)) /* x */
/* 8 , */
int queen[MAXQUEEN];
int total_solution = 0; /* */
/* */
void backtrack();
int attack(int,int);
void output_solution();
int main(void)
{
backtrack();
return 0;
}
/* */
void backtrack()
{
int row = 0;
queen[row] = -1;
while(row >= 0)
{
queen[row]++;
while(queen[row] < MAXQUEEN && attack(row, queen[row]))
queen[row]++;
if(queen[row] < MAXQUEEN)
if(row == (MAXQUEEN-1))
output_solution(); /* */
else
queen[++row] = -1;
else
row--;
}
}
/* (row,col) 1, 0 */
int attack(int row, int col)
{
int i, atk=FALSE;
int offset_row, offset_col;
i=0;
while(!atk && i<row)
{
offset_row=ABS(i-row);
offset_col=ABS(queen[i]-col);
/* , */
/* , ,atk==TRUE */
atk = (queen[i] == col) || (offset_row == offset_col);
i++;
}
return atk;
}
/* 8 */
void output_solution()
{
int x,y;
total_solution += 1;
printf("Solution#%3d
\t",total_solution);
for(x=0;x<MAXQUEEN;x++)
{
for(y=0;y<MAXQUEEN;y++)
if(y==queen[x])
printf("Q"); /* Q */
else
printf("-"); /* - */
printf("
\t");
}
printf("
");
getchar();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.