# Random Walk/은지

```~cpp
#include <iostream>
#include <ctime>
using namespace std;

void move(int dir);
int check_all(int);
void display(int);

int **walk;
int **check;

int row, col;

int main()
{
int size, i, j;
int end , direct ;

cout << "=random walk problem= \n";
cout << "배열 크기 입력 : "  ;
cin >> size;

//동적 배열로 walk판 만듬
walk = new int *[size+2];
for (i=0; i<size+2; i++)
walk[i] = new int[size+2];

//동적배열로 check판 만듬
check = new int *[size+2];
for (i=0; i<size+2; i++)
check[i] = new int[size+2];

//배열 초기화
for(i=0; i<size+2; i++)
for(j=0; j<size+2; j++)
{
if (i==0 || i==size+1 || j==0 || j==size+1)
walk[i][j] = -1;
else
walk[i][j] = 0;

check[i][j] = 0;
}

srand(time(0));
row = (rand() % size)+1;
col = (rand() % size)+1;

do{

direct = rand() % 8;		//방향 결정

move(direct);	                  //결정된 방향으로 움직임
end = check_all(size);		//모든 판을 다 갔는지 체크

}while(!end);

//결과 출력
display(size);

return 0;
}

int check_all(int size)
{
int sum =0;

for(int i=0; i<size+2; i++)
for(int j=0; j<size+2; j++)
sum += check[i][j];

if(sum == size*size)
return 1;
else
return 0;
}

void move(int dir)
{
switch(dir)
{
case 0 : if (walk[row-1][col] != -1)
{
row--;
walk[row][col]++;
check[row][col] = 1;

}

break;
case 1 : if (walk[row-1][col+1] != -1)
{
row--; col++;
walk[row][col]++;
check[row][col] = 1;

}
break;

case 2 :if (walk[row][col+1] != -1)
{
col++;
walk[row][col]++;
check[row][col] = 1;
}
break;
case 3 : if (walk[row+1][col+1] != -1)
{
row++; col++;
walk[row][col]++;
check[row][col] = 1;
}

break;

case 4: if (walk[row+1][col] != -1)
{
row++;
walk[row][col]++;
check[row][col] = 1;
}

break;
case 5 : if (walk[row+1][col-1] != -1)
{
row++; col--;
walk[row][col]++;
check[row][col] = 1;
}
break;
case 6 : if (walk[row][col-1] != -1)
{
col--;
walk[row][col]++;
check[row][col] = 1;

}
break;
case 7 : if (walk[row-1][col-1] != -1)
{
row--; col--;
walk[row][col]++;
check[row][col] = 1;				 }
break;
}

}

void display(int size)
{
int count = 0;

for(int i=1; i<size+1; i++)
{
for(int j=1; j<size+1; j++)
{
cout << walk[i][j] << "\t";
count += walk[i][j];

}
cout <<"\n";
}

cout << "총 움직인 횟수 : "  << count << "\n";
}

```

음..방향을 배열루 입력시키믄 switch문을 길게 안써두 되는군..
그리구 check판이 없어두 끝나는걸 알 수 있을꺼 같다.
고쳐야지..