算法:老鼠走迷宫问题

算法:老鼠走迷宫问题(初)

【写在前面】

  老鼠走迷宫问题的递归实现,是对递归思想的一种应用。

【问题描述】

  给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图。给定入口位置和出口位置,判断之间是否存在通路并显示出走出迷宫的道路。  

【代码】

对题目的描述部分

int migo[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, 0, 0, 2, 2},
{2, 2, 0, 2, 0, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2}};//迷宫图

int startX=1,startY=1;
int endX=5,endY=5;

说明:

    1.给出用来描述迷宫信息的数组。

    2.给出入口和出口坐标。

递归的实现部分

int flag=0;

int find(int x,int y)
{
    migo[x][y]=1;
    if(x==endX&&y==endY)
        flag=1;
    if(migo[x][y+1]==0&&flag!=1)
        find(x,y+1);
    if(migo[x][y-1]==0&&flag!=1)
        find(x,y-1);
    if(migo[x+1][y]==0&&flag!=1)
        find(x+1,y);
    if(migo[x-1][y]==0&&flag!=1)
        find(x-1,y);
    if(flag!=1)
        migo[x][y]=0;
    return flag;
}

说明:

    1.第一句代码 migo[x][y]=1,意义何在呢?我们在开始处把它设为1,表示我们以此为轴开始朝四周移动,每到下一个点便再以之为轴,...不段进行判断,直达我们找到通路,即flag=1。但是我们需要明白的是,一旦我们沿某条路找不到通路时,最后一句代码

    便又将其还原为0,在对迷宫的所有道路探索后,我们可能会找到通路,那条路上的每一个元素便会被赋予1,如果都没有,那就不会。

    2.关于递归的思路:不断以某点为轴,向四处扩散,在找到出口点便停止递归。

道路展示实现部分

int main(int argc, char **argv)
{
    int i,j;
    printf("显示迷宫:\n");
    for(i=0;i<7;i++)
    {
      for(j=0;j<7;j++)
       if(migo[i][j]==2)
        printf("");
       else
        printf(" ");
       printf("\n");
    }
    
     if(find(startX,startY)==0)
     {
      printf("\n没有找到出口!\n");
     }
     else
     {
      printf("\n显示路径:\n");
      for(i=0;i<7;i++)
      {
       for(j=0;j<7;j++)
       {
        if(migo[i][j]==2)
         printf("");
        else if(migo[i][j]==1)
         printf("*");
        else
         printf(" ");
       }
       printf("\n");
      }
     }
     return 0;
}

 

posted @ 2016-10-08 22:15  子烁爱学习  阅读(5337)  评论(0编辑  收藏  举报