U E D R , A S I H C RSS

Eight Queen Problem/이선호

~cpp 
#include <iostream.h>
// 상수 선언
#define NO	0
#define QUEEN	1
#define ROAD	2
int b[9][9]; // 체스판 선언 
void ClearBoard();
void FillBoard(int i, int j);
void main()
{
	// 시작^^
	int q[8]; // Col을 저장할 배열
	int i, j; 
	// 체스판 초기화
	ClearBoard();
	for(i=0;i<=7;i++) q[i] = 0;
	int line = 0;
	while(line != 8) { // 8줄을 모두 성공하면 끝내기.
		// 빈칸 찾아 채우기
		if(b[line][q[line]] == NO) { // 빈칸이 있으면 채우고.
			FillBoard(line, q[line]); 
			line++;
		}
		else { // 빈칸이 없으면 앞줄에 값을 증가시킨다.
			for(i=line+1;i<=7;i++) q[i] = 0;
			q[line]++;
			if(q[line] >=8) {
				q[line] = 0;
				q[line-1]++;
			}
			line=0;
			ClearBoard();
		}
	}

	// 출력해볼까?
	for(i=0;i<=7;i++) {
		for(j=0;j<=7;j++) {
			if( b[j][i] == 1) cout << "Q ";
			else cout << "- ";
		}
		cout << "\n";
	}
	// 여기까지 출력
}
void FillBoard(int i, int j) // 보드를 채웁시다.
{
	int k, l;
	// 왼쪽 오른쪽 위 아래
	for(k=0;k<=7;k++) { b[k][j] = ROAD; b[i][k] = ROAD; }
	// 대각선1
	for(k=i,l=j;k<=7 && l<=7;k++,l++) b[k][l] = ROAD;
	for(k=i,l=j;k>=0 && l>=0;k--,l--) b[k][l] = ROAD;
	// 대각선2
	for(k=i,l=j;k<=7 && l>=0;k++,l--) b[k][l] = ROAD;
	for(k=i,l=j;k>=0 && l<=7;k--,l++) b[k][l] = ROAD;
	b[i][j] = QUEEN;
}
void ClearBoard() // 보드를 닦읍시다.
{
	int i, j;
	for(i=0;i<=7;i++) { 
		for(j=0;j<=7;j++) {
			b[i][j] = NO;
		}
	} 
}


여기에 옮겨봤습니다.. ㅡ.ㅡ; --선호
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0066 sec