== 자료구조 숙제 == === 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 #include #include #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(); // 결과값 출력 } }}} 지저분한게... 어디를 고쳐야 할지... 막막하네요... 공부를 합시다 ㅡ_ㅡ^