나름대로 열심히 풀어보았으나 
생각처럼 깔끔하게 나오진 않는군요 -_-;;
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;
}













