迷宫问题

递归的经典问题,很简单的代码 有一个层次,就像电流一样,路径仿佛是一条可以有倒退功能的电流,用电流代替人走路做功,电流可以是
具有逻辑功能的电流.

编程:就是做数字电路设计来解决实际问题的思想过程,程序语言可调用CPU内置的电路结构,门电路例如,指令集合也就是更底层的语言。

完整代码:


include<stdio.h>
#include<stdlib.h>
int visit(int,int);
//
int maze[7][7] ={{2,2,2,2,2,2,2},
{2,0,0,0,0,0,2},
{2,0,2,0,2,0,2},
{2,0,0,2,0,2,2},
{2,2,0,2,0,2,2},
{2,0,0,0,0,0,2},
{2,2,2,2,2,2,2}};
//maze迷宫地图,也可标记路径,0可行,2绕行
int startI = 1,startJ =1; 
// 入口
int endI= 5,endJ= 5; 
// 出口
int success=0;
int main(void) 
{
int i,j;
printf("显示迷宫: \n");
for(i =0;i<7;i++) {
for(j =0;j<7;j++)
if(maze[i][j] == 2)//判断显示的类型
printf("█");
else
printf(" ");
printf("\n");
}
if(visit(startI,startJ) == 0)
printf("\n没有找到出口! \n");
else{
printf("\n显示路径: \n");
for(i =0;i<7;i++) {
for(j =0;j<7;j++) {
if(maze[i][j] == 2)
printf("█");
else if(maze[i][j] == 1)
printf("◇");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
//寻找出路
int visit(int i,intj){
maze[i][j] =1;//开始设置路径
if(i ==endI&&j==endJ)
success=1;
if(success!= 1&&maze[i][j+1] == 0)visit(i,j+1);//右递归
if(success!= 1&&maze[i+1][j] == 0)visit(i+1,j);//下递归
if(success!= 1&&maze[i][j-1] ==0)visit(i,j-1);//左递归
if(success!= 1&&maze[i-1][j] ==0)visit(i-1,j);//上递归
if(success!= 1)
maze[i][j] =0;//没有找到,取消该点路径标签
return success;

你可能感兴趣的:(迷宫问题)