~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 걸 꺼 .
고..