No older revisions available
No older revisions available
~cpp
#include <iostream>
#include <ctime> using namespace std;
int main()
{
int walk = 0;
int movement = 0;
int row, colum;
cout << "미로배열의 행입력(2< n < 40) :";
cin >> row;
while(row < 2 || row > 40) {
cout << "\n잘못입력하셨습니다. 다시 입력해 주세요: ";
cin >> row;
}
cout << "\n미로배열의 열입력(2 < m < 20) :";
cin >> colum;
while(colum < 2 || colum > 20) {
cout << "\n잘못입력하셨습니다. 다시 입력해 주세요: ";
cin >> colum;
}
cout << "\n";
int **tile;
tile = new int *[row+2];
int crs, avn;
for(crs=0;crs<row+2;crs++)
{
tile[crs] = new int [colum+2];
}
for(crs=0; crs<=row+1; crs++)
{ tile[0][crs] = 1;
tile[row+1][crs] = 1;
}
for(avn=0; avn<=colum+1; avn++)
{
tile[avn][0] = 1;
tile[avn][colum+1] = 1;
}
int path;
cout << "미로의 길을 입력하시오.";
for(avn=1; avn<=row; avn++)
for(crs=1; crs<=colum; crs++)
{
cin >> path;
tile[avn][crs] = path;
}
cout << "\n 미로를 완성했습니다. 시작해 볼까요?\n";
int i = 1;
int j = 1;
cout << "현재 위치는 (" << i << ", " << j << ") 이다.\n";
int imove[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
int jmove[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
srand(time(0));
while(true)
{
movement = rand() % 8;
switch(movement)
{
case 0:
if(tile[i + imove[0]][j + jmove[0]] == 0)
{
i = i + imove[0];
j = j + jmove[0];
cout << "현재 위치는 (" << i << ", " << j << ") 이다.\n";
walk++;
}
break;
case 1:
if(tile[i + imove[1]][j + jmove[1]] == 0)
{
i = i + imove[1];
j = j + jmove[1];
cout << "현재 위치는 (" << i << ", " << j << ") 이다.\n";
walk++;
}
break;
case 2:
if(tile[i + imove[2]][j + jmove[2]] == 0)
{
i = i + imove[2];
j = j + jmove[2];
cout << "현재 위치는 (" << i << ", " << j << ") 이다.\n";
walk++;
}
break;
case 3:
if(tile[i + imove[3]][j + jmove[3]] == 0)
{
i = i + imove[3];
j = j + jmove[3];
cout << "현재 위치는 (" << i << ", " << j << ") 이다.\n";
walk++;
}
break;
case 4:
if(tile[i + imove[4]][j + jmove[4]] == 0)
{
i = i + imove[4];
j = j + jmove[4];
cout << "현재 위치는 (" << i << ", " << j << ") 이다.\n";
walk++;
}
break;
case 5:
if(tile[i + imove[5]][j + jmove[5]] == 0)
{
i = i + imove[5];
j = j + jmove[5];
cout << "현재 위치는 (" << i << ", " << j << ") 이다.\n";
walk++;
}
break;
case 6:
if(tile[i + imove[6]][j + jmove[6]] == 0)
{
i = i + imove[6];
j = j + jmove[6];
cout << "현재 위치는 (" << i << ", " << j << ") 이다.\n";
walk++;
}
break;
case 7:
if(tile[i + imove[7]][j + jmove[7]] == 0)
{
i = i + imove[7];
j = j + jmove[7];
cout << "현재 위치는 (" << i << ", " << j << ") 이다.\n";
walk++;
}
break;
}
if( i == colum && j == row)
break;
}
cout << "바퀴벌레가 이동한 횟수는 " << walk << "번 입니다.\n\n";
cout << "\n";
return 0;
}