用右手一直貼著牆走迷宮,最後一定會找到出口
#include <stdio.h>
enum DIR {left, right, up, down};
void mazeTraverse(char (* maze)[12], int s_x, int s_y, int g_x, int g_y)
{
int i, j;
int x, y;
enum DIR dir;
x = s_x, y = s_y;
if (y == 0)
dir = right;
else if (x == 0)
dir = down;
else if (y == 11)
dir = left;
else
dir = up;
while (1)
{
maze[x][y] = 'X';
if (dir == right)
{
if (maze[x+1][y] != '#')
{
x++;
dir = down;
}
else
{
if (maze[x][y+1] == '#')
dir = up;
else
y++;
}
}
else if (dir == left)
{
if (maze[x-1][y] != '#')
{
x--;
dir = up;
}
else
{
if (maze[x][y-1] == '#')
dir = down;
else
y--;
}
}
else if (dir == up)
{
if (maze[x][y+1] != '#')
{
y++;
dir = right;
}
else
{
if (maze[x-1][y] == '#')
dir = left;
else
x--;
}
}
else if (dir == down)
{
if (maze[x][y-1] != '#')
{
y--;
dir = left;
}
else
{
if (maze[x+1][y] == '#')
dir = right;
else
x++;
}
}
if (x == g_x && y == g_y)
{
maze[x][y] = 'G';
break;
}
}
}
int main(void)
{
char maze[12][12] = {
'#','#','#','#','#','#','#','#','#','#','#','#',
'#','.','.','.','#','.','.','.','.','.','.','#',
'.','.','#','.','#','.','#','#','#','#','.','#',
'#','#','#','.','#','.','.','.','.','#','.','#',
'#','.','.','.','.','#','#','#','.','#','.','.',
'#','#','#','#','.','#','.','#','.','#','.','#',
'#','.','.','#','.','#','.','#','.','#','.','#',
'#','#','.','#','.','#','.','#','.','#','.','#',
'#','.','.','.','.','.','.','.','.','#','.','#',
'#','#','#','#','#','#','.','#','#','#','.','#',
'#','.','.','.','.','.','.','#','.','.','.','#',
'#','#','#','#','#','#','#','#','#','#','#','#',
};
int i, j;
mazeTraverse(maze, 2, 0, 4, 11);
for (i = 0; i < 12; i++)
{
for (j = 0; j < 12; j++)
printf("%c", maze[i][j]);
printf("\n");
}
return 0;
}
Nice article
回覆刪除