~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; }