More actions
imported>Unknown No edit summary |
(Repair batch-0008 pages from live compare) |
||
| Line 8: | Line 8: | ||
//20041004 김홍선 | //20041004 김홍선 | ||
const int Direction = 8; // 바퀴벌레가 움직이는 8방향 | const int Direction = 8; // 바퀴벌레가 움직이는 8방향 | ||
const int imove | const int imove[8] = {-1,0,1,1,1,0,-1,-1}; // 바퀴벌레가 움직이는 방향의 x 좌표 증감 | ||
const int jmove | const int jmove[8] = {1,1,1,0,-1,-1,-1,0}; // 바퀴벌레가 움직이는 방향의 y 좌표 증감 | ||
int Tile | int Tile[40][20] = {0,}; // 바퀴벌레가 돌아다니는 타일의 배열화 | ||
int size_x, size_y; // x, y 좌표의 타일 갯수 | int size_x, size_y; // x, y 좌표의 타일 갯수 | ||
int count,t,R_count=0; // 바퀴벌레의 이동횟수, 랜덤 숫자, 바퀴벌레가 모든 타일을 돌아다니도록 하는 카운터 | int count,t,R_count=0; // 바퀴벌레의 이동횟수, 랜덤 숫자, 바퀴벌레가 모든 타일을 돌아다니도록 하는 카운터 | ||
| Line 51: | Line 51: | ||
{ | { | ||
t=rand()%Direction; // 랜덤으로 바퀴벌레가 움직일 방향을 정한다 | t=rand()%Direction; // 랜덤으로 바퀴벌레가 움직일 방향을 정한다 | ||
if(Pos_x + imove | if(Pos_x + imove[t] >= 0 && Pos_x + imove[t] < size_x) // 바퀴벌레가 타일밖으로 벗어나지 않도록 하는 조건 | ||
Pos_x += imove | Pos_x += imove[t]; // 바퀴벌레의 x 좌표 위치를 갱신 | ||
if(Pos_y + jmove | if(Pos_y + jmove[t] >= 0 && Pos_y + jmove[t] < size_y) | ||
Pos_y += jmove | Pos_y += jmove[t]; // 바퀴벌레의 y 좌표 위치를 갱신 | ||
count++; // 바퀴벌레가 총 움직인 횟수를 구하기 위한 카운터 | count++; // 바퀴벌레가 총 움직인 횟수를 구하기 위한 카운터 | ||
if(Tile | if(Tile[Pos_x][Pos_y]==0) | ||
R_count++; // 바퀴벌레가 모든 타일을 방문하면 멈추게 하기 위한 카운터 | R_count++; // 바퀴벌레가 모든 타일을 방문하면 멈추게 하기 위한 카운터 | ||
Tile | Tile[Pos_x][Pos_y]++; // 바퀴벌레가 타일을 방문할 때마다 증가하여 방문 횟수를 구한다. | ||
}; | }; | ||
| Line 68: | Line 68: | ||
for(int m=0; m < size_x; m++){ | for(int m=0; m < size_x; m++){ | ||
for(int n=0; n < size_y; n++) | for(int n=0; n < size_y; n++) | ||
cout << Tile | cout << Tile[m][n] << "\t"; | ||
cout << endl; | cout << endl; | ||
} | } | ||
| Line 97: | Line 97: | ||
지저분한게... 어디를 고쳐야 할지... 막막하네요... | 지저분한게... 어디를 고쳐야 할지... 막막하네요... | ||
공부를 합시다 ㅡ_ㅡ^ | 공부를 합시다 ㅡ_ㅡ^ | ||
Latest revision as of 01:40, 27 March 2026
자료구조 숙제
Randomwalk Problem
== 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(); // 결과값 출력
}
지저분한게... 어디를 고쳐야 할지... 막막하네요... 공부를 합시다 ㅡ_ㅡ^