ìž�료구조 ìˆ™ì œ ¶
Randomwalk Problem ¶
~cpp
== Roach.h ==
//20041004 ê¹€í™�ì„
const int Direction = 8; // ë°”í€´ë²Œë ˆê°€ 움ì§�ì�´ëŠ” 8ë°©í–¥
const int imove[8] = {-1,0,1,1,1,0,-1,-1}; // ë°”í€´ë²Œë ˆê°€ 움ì§�ì�´ëŠ” ë°©í–¥ì�˜ x 좌표 ì¦�ê°�
const int jmove[8] = {1,1,1,0,-1,-1,-1,0}; // ë°”í€´ë²Œë ˆê°€ 움ì§�ì�´ëŠ” ë°©í–¥ì�˜ y 좌표 ì¦�ê°�
int Tile[40][20] = {0,}; // ë°”í€´ë²Œë ˆê°€ ë�Œì•„다니는 타ì�¼ì�˜ ë°°ì—´í™”
int size_x, size_y; // x, y 좌표� 타� 갯수
int count,t,R_count=0; // ë°”í€´ë²Œë ˆì�˜ ì�´ë�™íšŸìˆ˜, ëžœë�¤ 숫ìž�, ë°”í€´ë²Œë ˆê°€ ëª¨ë“ íƒ€ì�¼ì�„ ë�Œì•„다니ë�„ë¡� 하는 ì¹´ìš´í„°
class Roach
{
private:
int Pos_x, Pos_y; // ë°”í€´ë²Œë ˆì�˜ 위치
public:
void Initiation(); // 타�� 초기화
void Input(); // ë°”í€´ë²Œë ˆì�˜ 시작위치 ìž…ë ¥í•¨ìˆ˜
void Walk(); // ë°”í€´ë²Œë ˆê°€ 움ì§�ì�´ëŠ” 메서드
void show(); // 결과값 ì¶œë ¥ 함수
};
void Roach :: Initiation() // 타�� 초기화
{
cout << "가로ì�˜ í�¬ê¸°ë¥¼ ì„¤ì •í•˜ì„¸ìš”. ( 2 < x <=40 ) \n";
while(!(cin >> size_x) || size_x<3 || size_x > 40)
cerr << "잘못ë�œ ê°’ì�„ ìž…ë ¥í•˜ì…¨ìŠµë‹ˆë‹¤. 다시 ìž…ë ¥í•´ì£¼ì„¸ìš”.\n";
cout << "세로ì�˜ í�¬ê¸°ë¥¼ ì„¤ì •í•˜ì„¸ìš”. ( 2 < y <=20 ) \n";
while(!(cin >> size_y) || size_y < 3 || size_y >20)
cerr << "잘못ë�œ ê°’ì�„ ìž…ë ¥í•˜ì…¨ìŠµë‹ˆë‹¤. 다시 ìž…ë ¥í•´ì£¼ì„¸ìš”.\n";
};
void Roach :: Input() // ë°”í€´ë²Œë ˆì�˜ 시작위치 ìž…ë ¥í•¨ìˆ˜
{
int i,j;
cout << "x 좌표ì�˜ 위치를 ì„¤ì •í•˜ì„¸ìš” \n";
cin >> i;
cout << "y 좌표ì�˜ 위치를 ì„¤ì •í•˜ì„¸ìš” \n";
cin >> j;
Pos_x = i;
Pos_y = j;
};
void Roach :: Walk()
{
t=rand()%Direction; // ëžœë�¤ìœ¼ë¡œ ë°”í€´ë²Œë ˆê°€ 움ì§�ì�¼ ë°©í–¥ì�„ ì •í•œë‹¤
if(Pos_x + imove[t] >= 0 && Pos_x + imove[t] < size_x) // ë°”í€´ë²Œë ˆê°€ 타ì�¼ë°–으로 벗어나지 않ë�„ë¡� 하는 ì¡°ê±´
Pos_x += imove[t]; // ë°”í€´ë²Œë ˆì�˜ x 좌표 위치를 ê°±ì‹
if(Pos_y + jmove[t] >= 0 && Pos_y + jmove[t] < size_y)
Pos_y += jmove[t]; // ë°”í€´ë²Œë ˆì�˜ y 좌표 위치를 ê°±ì‹
count++; // ë°”í€´ë²Œë ˆê°€ ì´� 움ì§�ì�¸ 횟수를 구하기 위한 ì¹´ìš´í„°
if(Tile[Pos_x][Pos_y]==0)
R_count++; // ë°”í€´ë²Œë ˆê°€ ëª¨ë“ íƒ€ì�¼ì�„ 방문하면 멈추게 하기 위한 ì¹´ìš´í„°
Tile[Pos_x][Pos_y]++; // ë°”í€´ë²Œë ˆê°€ 타ì�¼ì�„ ë°©ë¬¸í• ë•Œë§ˆë‹¤ ì¦�가하여 방문 횟수를 구한다.
};
void Roach :: show()
{
cout << "ë°”í€´ë²Œë ˆì�˜ ì´� ì�´ë�™íšŸìˆ˜ëŠ” " << count << " 입니다.\n";
cout << "현재 위치는 " << Pos_x << " , " << Pos_y << "입니다.\n";
cout << "� 타�� 방문한 횟수는 다�과 같습니다. \n";
for(int m=0; m < size_x; m++){
for(int n=0; n < size_y; n++)
cout << Tile[m][n] << "\t";
cout << endl;
}
}
//20041004 ê¹€í™�ì„
#include <iostream.h>
#include <cstdlib>
#include <ctime>
#include "Roach.h"
void main()
{
srand((unsigned)time(NULL)); // 시간ì�„ ì�´ìš©í•´ ëžœë�¤ì�„ ì„¤ì •
Roach Hong; // Hong ��는 Roach �래스를 �성
Hong.Initiation(); // 타� 배열� 초기화
Hong.Input(); // ë°”í€´ë²Œë ˆì�˜ 시작위치 ì„¤ì •
while(R_count!=size_x*size_y || count < 50000) // ë°”í€´ë²Œë ˆê°€ ëª¨ë“ íƒ€ì�¼ì�„ 거치면 멈추거나 횟수가 50000ì�„ 넘으면 멈추게 한다
Hong.Walk(); // ë°”í€´ë²Œë ˆì�˜ ì�´ë�™ 메서드
Hong.show(); // 결과값 ì¶œë ¥
}
ì§€ì €ë¶„í•œê²Œ... 어디를 ê³ ì³�야 í• ì§€... 막막하네요...
공부를 합시다 ㅡ_ㅡ^
공부를 합시다 ㅡ_ㅡ^










