U E D R , A S I H C RSS

Eight Queen Problem/임인택

n-Queen 모델 가능다~

기 구

8bit == 1byte 라는 것 같다는 다. 는 n-Queen 로까 기까 들고 index 로 값 는 배 능률 방법다. 단 빠를 것로 믿는데.. 빨라봤 나 빠르겠.--;

는..

recursive-call 겠다는 뜩 들다. 가 되는 부 backtrack 는 부다.

구린

call 다. loop 돌면 get_Queen()다. 는 get_Queen(0,0); 는게 가 라고 는데..--;

source code

~cpp 
#include <iostream.h>
#define QUEEN 8

int Queen[QUEEN][QUEEN]={0};
int total=0;
void print_result();
void reset(int fromline=0);
void get_Queen(int x, int y);
int check(int i, int j);


int main()
{
	for(int i=0; i<QUEEN; i++)
	{
		reset();
		get_Queen(i,0);
	}
	return 0;
}

void get_Queen(int x, int y)
{
	reset(y+1);
	Queen[x][y]=1;

	if(y==QUEEN-1) print_result();

	for(int i=0; i<QUEEN; i++)
		if(check(i,y+1))
			get_Queen(i,y+1);
	
	Queen[x][y]=0;
}


void print_result()
{
	int i,j;

	for(i=0; i<QUEEN; i++)
	{
		for(j=0; j<QUEEN; j++)
			cout << Queen[j][i] << "  ";
		cout << endl;
	}
	cin.get();
}

void reset(int fromline)
{
	int i,j;

	for(i=0; i<QUEEN; i++)
		for(j=fromline; j<QUEEN; j++)
			Queen[i][j]=0;
}

int check(int i, int j)
{
	if(i<0 || j<0 || i>=QUEEN || j>=QUEEN)
		return 0;

	int x, y, sum=0;

	for(y=j-1; y>=0 && sum==0; y--)	/* 로 */
		sum+=Queen[i][y];
	for(x=i-1; x>=0 && sum==0; x--) /* 로 */
		sum+=Queen[x][j];
	for(x=i-1, y=j-1; x>=0 && y>=0 && sum==0; x--, y--) /* 대각 */
		sum+=Queen[x][y];
	for(x=i+1, y=j-1; x<QUEEN && y>=0 && sum==0; x++, y--) /* 대각 */
		sum+=Queen[x][y];

	return (int)(sum==0);
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:12
Processing time 0.0075 sec