~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;
}
Retrieved from http://wiki.zeropage.org/wiki.php/미로찾기/이규완오승혁
last modified 2021-02-07 05:29:31