~cpp
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
void main(){
srand(time(0));
//바퀴벌레를 8방향으로 이동하게 할 배열
int imove[] = {-1,0,1,1,1,0,-1,-1};
int jmove[] = {1,1,1,0,-1,-1,-1,0};
// 방의 크기
int Xroom;
int Yroom;
// 바퀴벌레의 좌표값
int ibug;
int jbug;
int count = 0; // 총이동한 횟수를 계산하게될 integer 값
bool existZero = false; // 바퀴벌레가 모두 돌아다녔는지 확인할때 쓰일 bool형 값
int i,j;
// 바퀴벌레가 돌아다닐 방을 생성
do{
cout << "직사각형의 가로크기를 입력해주세요(2 < X <= 40) :";
cin >> Xroom;
cout << "직사각형의 세로크기를 입력해주세요(2 <= Y < 20) :";
cin >> Yroom;
if (Xroom > 2 && Xroom < 41 && Yroom > 1 && Yroom < 21)
break;
cout << "세로, 가로의 크기의 범위를 벗어났네요. 다시 입력하세요." << endl;
}while(true);
// 2중동적배열을 만드는 함수
int **room;
room = new int*[Xroom];
for (i=0; i<Xroom; i++)
room[i] = new int[Yroom];
// 생성한 동적배열을 초기화
for (i=0;i<Xroom;i++)
for(j=0;j<Yroom;j++)
room[i][j] =0;
// 바퀴벌레를 생성하는 do ~ while 문
do{
cout << "바퀴벌레의 초기값 X를 입력해주세요 :";
cin >> ibug;
cout << "바퀴벌레의 초기값 Y를 입력해주세요 :";
cin >> jbug;
if (ibug >= 0 && ibug < Xroom && jbug >= 0 && jbug < Yroom)
break;
cout << "바퀴벌레가 방의 범위를 벗어났네요. 다시 입력하세요." << endl;
}while(true);
room[ibug][jbug] = 1; // 바퀴벌레 초기값의 초기화
// 바퀴벌레를 이동시키고 모두 이동하면 종료하는 while문
while(count<50000 && existZero == false){
existZero = true;
for(i=0;i<Xroom;i++){
for(j=0;j<Yroom;j++){
if(room[i][j] == 0)
existZero = false;
}
}
int random = rand()%8; // 0~7 까지의 임의의 수 생성해서 random 이란 integer 값에 대입
// 바퀴벌레가 범위를 벗어나지 않도록 해주는 함수
if (ibug + imove[random] <0 || ibug + imove[random] > Xroom-1 ||
jbug + jmove[random] <0 || jbug + jmove[random] > Yroom-1)
continue;
// 바퀴벌레를 이동시키고 카운트를 하는 함수
else{
room[ibug+imove[random]][jbug+jmove[random]]++;
ibug = ibug + imove[random];
jbug = jbug + jmove[random];
count++;
}
}
//이동 횟수 출력
cout << "각 방에 이동한 횟수 : \n\n";
for(i=0;i<Xroom;i++){
for(j=0;j<Yroom;j++)
cout << setw(3) << room[i][j];
cout << endl;
}
//총 이동횟수 출력
cout << "\n총 이동한 횟수 :" << count << endl;
//메모리 해제
for (i=0; i<Xroom;i++)
delete[] room[i];
delete [] room;
}