首页 > 其他 > 详细

老鼠走迷宫II

时间:2014-03-08 21:16:22      阅读:378      评论:0      收藏:0      [点我收藏+]

转自:http://blog.csdn.net/holymaple/article/details/8636234

由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不止一条,如何求出所有的路径呢?

解法:求所有的路径困哪起来复杂但其实更简单,只要在老鼠走到出口时显示经过的路径,然后退回上一格重新选择下一个位置继续递回就可以了,比求出单一路径更简单,程序只需要做一点点修改就行了。

C++版:

 

bubuko.com,布布扣
  1 /*
  2  *内容;老鼠走迷宫II 
  3  *时间;3/01/2013 
  4  */
  5  
  6 #include <stdio.h>
  7 
  8 // 注:二维数组,根据编译器采取的策略不同,起点或终点位置会有所不同
  9 //     既编译器可能采取“按行优先”或者是“按列优先”这两种不同的策略 
 10 
 11 //终点位置 
 12 #define END_I 7
 13 #define END_J 1 
 14 
 15 //迷宫为全局变量 
 16 //初始化迷宫,用2来表示墙壁、1表示路径 
 17 int g_maze[9][9] = { {2, 2, 2, 2, 2, 2, 2, 2, 2},
 18                        {2, 0, 0, 2, 0, 2, 0, 0, 2},//起点位置(1,1) 
 19                        {2, 0, 2, 0, 0, 0, 0, 2, 2},
 20                        {2, 0, 0, 0, 2, 2, 0, 0, 2},
 21                        {2, 2, 2, 0, 0, 0, 2, 0, 2},
 22                        {2, 0, 0, 0, 2, 0, 2, 0, 2},
 23                        {2, 0, 2, 2, 0, 2, 0, 0, 2},
 24                        {2, 0, 0, 0, 0, 0, 0, 2, 2},//终点位置(7, 1) 
 25                        {2, 2, 2, 2, 2, 2, 2, 2, 2},
 26                      };
 27                      
 28 bool g_sucess = false;//全局变量,用来确保是否到达终点。
 29 int g_count = 0;//全局变量,用来统计路径的数量
 30 
 31 //打印迷宫 
 32 void printMaze(int *maze, int mazeWidth, int mazeHeight)
 33 {
 34     int mazeSize = 0;
 35     //将传进来二位数组的长度相乘确保能够完全遍历完数组 
 36     mazeSize = mazeWidth * mazeHeight;
 37     for (int i = 0; i < mazeSize; ++i)
 38     {
 39         if ( (i%mazeWidth) == 0)
 40         {
 41             printf ("\n");
 42         }
 43         if ( *maze == 2 )//2表示墙壁,墙壁用X表示 
 44         {
 45             printf ("X");
 46         }
 47         else if ( *maze == 1 )//1表示走过的路径,用“.”表示 
 48         {
 49             printf ("."); 
 50         }
 51         else if ( *maze == 3 )//终点位置打印笑脸 
 52         {
 53             putchar(1);
 54         }
 55         else//0表示可走路径,用“o”来表示 
 56         {
 57             printf ("o");
 58         }
 59         maze++;
 60     }
 61     printf ("\n\n");        
 62 } 
 63 
 64 void visit(int i, int j)
 65 {
 66     g_maze[i][j] = 1;
 67     if ( (i==END_I) && (j==END_J) )
 68     {
 69         g_maze[i][j] = 3;//标记终点位置打印特别符号来区别路径
 70         g_sucess = true;//表示至少找到一条路径
 71         printf ("\n已经找到了第%d条路径:\n", ++g_count);
 72         printMaze(&(g_maze[0][0]), 9, 9);
 73     }
 74     //向下走 
 75     if (g_maze[i][j+1]==0)
 76     {
 77         visit(i, j+1);
 78     }
 79     //向右走 
 80     if (g_maze[i+1][j]==0)
 81     {
 82         visit(i+1, j);
 83     }
 84     //向上走 
 85     if (g_maze[i][j-1]==0)
 86     {
 87         visit(i, j-1);
 88     }
 89     //向左走 
 90     if (g_maze[i-1][j]==0)
 91     {
 92         visit(i-1, j);
 93     }
 94     g_maze[i][j] = 0;//恢复改点
 95 }
 96 
 97 
 98 
 99 int main()
100 {
101 
102     printf ("\t显示迷宫:\n\n");
103     printMaze(&(g_maze[0][0]), 9, 9);
104     visit(1,1);//把起点位置传进去
105     if ( g_sucess ) 
106     {
107         printf ("已找到出口,打印路径:\n\n");
108     }
109     else
110     {
111         printf ("没有找到出口!");
112     }
113     return 1;
114 }
bubuko.com,布布扣

老鼠走迷宫II,布布扣,bubuko.com

老鼠走迷宫II

原文:http://www.cnblogs.com/wanghui390/p/3587536.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!