U E D R , A S I H C RSS

Eight Queen Problem/정수민

나름대로 열심히 풀어보았으나

생각처럼 깔끔하게 나오진 않는군요 -_-;;

C++로 만들어서 이거 -_-; 해더파일도 라인수에 포함돼는건가 =0=

음음 다 합쳐서 96 + 21 + 15 라인이군요 -_-!

시간남으시면 지적해주세요;;

- 이걸론;; 두번째 문제를 수행하기에 에로사항이 꼽히는군요 -_-;; .................결국 못풀었슴미다. ㅠㅠ

소스

EightQueenProblem.h

~cpp
#ifndef EIGHTQUEENPROBLEM_H_
#define EIGHTQUEENPROBLEM_H_

class EightQueenProblem
{
private:
    int chess[8][8];			//체스판
	int x,y;					
	bool ContraryQueen();		//퀸들을 늘려가는함수
	bool SearchMap();			//체스판에 0(빈공간)이 남아있는지를 검색
	void SketchMap();			//체스판에 1(공격가능지역)과2(퀸이있는자리)를 체움
	void reset();				//체스판에 0이 남아있지 않을때 초기화

public:
	EightQueenProblem();		
	void MakeQueen();			//퀸을 늘려가기 시작하는 함수
	void PrintMap();			//결과 출력

};

#endif

EightQueenProblem.cpp

~cpp
//////////////////////////////////////////////////////////////////////////
//																		//
//	EightQueenProblem 이라는 문제를 풀이한 소스코드						//
//	일시 2006/04/17 7:17 ~ 2006/04/17 10:24								//
//	마지막 수정한 날자 2006/04/07										//
//	만든이 : 정수민														//
//																		/
////////////////////////////////////////////////////////////////////////


#include <iostream>

using namespace std;

#include "EightQueenProblem.h"


EightQueenProblem::EightQueenProblem () {
	reset ();

}

void EightQueenProblem::MakeQueen () {
	x=rand()%8;
	y=rand()%8;
	while ( 1 ) {
		if ( ContraryQueen () == 0 ) {		//0은 다음단계로 1은 리셋
			break;
		}
		reset ();
	}

}

bool EightQueenProblem::ContraryQueen () {
	for (int i = 0 ; i < 8 ; i++ ) {
		if ( SearchMap () == 1 ) {			//진행이 가능한지 불가능한지 추척
			return 1;
		}
		while ( 1 ) {
			x = rand()%8;
			y = rand()%8;
			if ( chess[x][y] == 0 ) {
				break;
			}
		}
		chess[x][y] = 2;					//결과에 하자가 없을시 퀸을 놓는다.
		SketchMap ();
	}
	return 0;

}

void EightQueenProblem::SketchMap () {
	int i,j;
	for (i = 0 ; i < 8 ; i++ ) {
		if (chess[x][i] != 2) {
			chess[x][i] = 1;
		}
		if (chess[i][y] != 2) {
			chess[i][y] = 1;
		}
	}
	for (i = 0 ; i < 8 ; i++ ) {
		for (j = 0 ; j < 8 ; j++ ) {
			if ( (x-y) == (i-j) && chess[i][j] != 2) {
				chess[i][j] = 1;
			}
			if ( (x+y) == (i+j) && chess[i][j] != 2) {
				chess[i][j] = 1;
			}
		}
	}

}

bool EightQueenProblem::SearchMap () {
	for (int i = 0 ; i < 8 ; i++ ) {
		for (int j = 0 ; j < 8 ; j++ ) {
			if ( chess[i][j] == 0 ) {
				return 0;
			}
		}
	}
	return 1;

}

void EightQueenProblem::reset () {
	for (int i = 0 ; i < 8 ; i++ ) {
		for (int j = 0 ; j < 8 ; j++ ) {
			chess[i][j] = 0;
		}
	}

}

void EightQueenProblem::PrintMap () {
	for (int i = 0 ; i < 8 ; i++ ) {
		for (int j = 0 ; j < 8 ; j++ ) {
			cout << chess[i][j] << " ";
		}
		cout << endl;
	}
}

tast.cpp

~cpp
#include "EightQueenProblem.h"
#include <iostream>
#include <time.h>


int main()
{
	srand((unsigned)time(NULL)); 

    EightQueenProblem test;
	test.MakeQueen();
	test.PrintMap();
    return 0;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0097 sec