迷宫
解法:
每个单元格的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止。
#include<stdio.h>
#define ARRAY_X 6
#define ARRAY_Y 6
int entrance_x = 0,entrance_y = 0; //入口
int exit_x = 5,exit_y = 5;//出口
int SUCCESS = 0;
char map[ARRAY_X][ARRAY_Y] = {
{0,0,0,2,2,2},
{2,0,0,2,2,2},
{0,0,0,2,0,0},
{0,0,2,2,0,0},
{0,0,0,0,0,0},
{2,2,2,0,0,0}
};
void display_map()//迷宫图显示
{
int i,j;
printf("the maze map!\n");
for(i = 0;i < ARRAY_X;i++)
{
for(j = 0;j < ARRAY_Y;j++)
{
if(map[i][j] == 2)
{
printf("# "); //墙壁
}
else
{
printf("* "); //可移动区域
}
}
printf("\n");
}
}
int model_move(int move_x,int move_y)
{
map[move_x][move_y] = 1;
if(move_x == exit_x && move_y == exit_y)
{
SUCCESS = 1;
}
else
{
if(map[move_x][move_y+1] == 0 && (move_y+1) < ARRAY_Y)
model_move(move_x, move_y + 1);
else if(map[move_x+1][move_y] == 0 && (move_x+1) < ARRAY_X)
model_move(move_x+1, move_y);
else if(map[move_x][move_y-1] == 0 && (move_y-1) > 0)
model_move(move_x, move_y - 1);
else if(map[move_x-1][move_y] == 0 && (move_x-1) > 0)
model_move(move_x-1, move_y);
}
if(SUCCESS != 1)
{
map[move_x][move_y] = 0;
}
return SUCCESS;
}
void display_route()
{
int i,j;
printf("\n---------------------------------------\n");
if(model_move(entrance_x, entrance_y) == 0)
printf("no found!\n");
else
{
for(i = 0;i < ARRAY_X;i++ )
{
for(j = 0;j < ARRAY_Y;j++)
{
if(map[i][j] == 1)
{
printf("@ "); //迷宫路径
}
else if(map[i][j] == 2)
{
printf("# "); //迷宫障碍
}
else
{
printf("* "); //迷宫可移动区域
}
}
printf("\n");
}
}
}
int main()
{
display_map();
display_route();
return 0;
}