算法之老鼠找迷宫2-找出所有出路

来源:互联网 发布:淘宝店铺允许出租吗 编辑:程序博客网 时间:2024/05/29 15:13

接着上一篇的想法,逻辑控制只找到了一条出路,现在我们想找出所有出路怎么办?

如果迷宫的设计使得走法不止一种,则只要在老鼠走至出口时显示出所有的路径,然后退回上一格重新选择下一个位置继续递归就可以了。如下图有两种走法。

#include<stdio.h>#include<stdlib.h>void visit(int,int);int maze[9][9] = {{2,2,2,2,2,2,2,2,2},                  {2,0,0,0,0,0,0,0,2},                  {2,0,2,2,0,2,2,0,2},                  {2,0,2,0,0,2,0,0,2},                  {2,0,2,0,2,0,2,0,2},                  {2,0,0,0,0,0,2,0,2},                  {2,2,0,2,2,0,2,2,2},                  {2,0,0,0,0,0,0,0,2},                  {2,2,2,2,2,2,2,2,2}};int startI = 1,startJ = 1;//开始的位置int endI = 7, endJ = 7;//出口的位置void visit(int i,int j){    int m,n;    maze[i][j] = 1;    //打印函数在递归函数里面,找到一条路径就打印    if(i == endI && j==endJ){        printf("\n show the path!\n");        for(m=0;m<9;m++){          for(n=0;n<9;n++)            if(maze[m][n]==2)              printf("2");            else if(maze[m][n]==1)              printf("1");            else              printf("0");          printf("\n");        }    }    if( maze[i+1][j]==0) visit(i+1,j);    if( maze[i-1][j]==0) visit(i-1,j);    if( maze[i][j+1]==0) visit(i,j+1);    if( maze[i][j-1]==0) visit(i,j-1);    maze[i][j]=0;}int main(){    int i,j;    printf("show the maze!\n");    for(i=0;i<9;i++){      for(j=0;j<9;j++)        if(maze[i][j]==2)          printf("2");        else          printf("0");        printf("\n");    }    visit(startI,startJ);   return 0;}


原创粉丝点击