老鼠走迷宫

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int visit(int, int);
 4 
 5 int maze[7][7] = 
 6 
 7 {
 8 {2, 2, 2, 2, 2, 2, 2},
 9 {2, 0, 0, 0, 0, 0, 2},
10 {2, 0, 2, 0, 2, 0, 2},
11 {2, 0, 0, 2, 0, 2, 2},
12 {2, 2, 0, 2, 0, 2, 2},
13 {2, 0, 0, 0, 0, 0, 2},
14 {2, 2, 2, 2, 2, 2, 2}
15 };
16 int startI = 1, startJ = 1; // 指定入口
17 int endI = 5, endJ = 5; // 指定出口
18 int success = 0;//用来标记 visit 函数的结果
19 
20 int main(void)
21 {
22     int i, j;
23     printf("显示迷宫:\n");
24     for(i = 0; i < 7; i++) 
25     {
26         for(j = 0; j < 7; j++)
27         if(maze[i][j] == 2)
28         printf("*");
29         else
30             printf(" ");
31         printf("\n");
32     }
33     if(visit(startI, startJ) == 0)
34         printf("\n 没有找到出口!\n");
35     else 
36     {
37         printf("\n 显示路径:\n");
38         for(i = 0; i < 7; i++) 
39         {
40             for(j = 0; j < 7; j++) 
41             {
42                 if(maze[i][j] == 2)
43                     printf("*");
44                 else if(maze[i][j] == 1)
45                     printf("#");
46                 else
47                     printf(" ");
48             }
49             printf("\n");
50         } 
51     }
52     return 0;
53 }
54 int visit(int i, int j) 
55 {    //递归算出老鼠该走的道路,上下方向判断
56     maze[i][j] = 1;
57     if(i == endI && j == endJ)//说明到达了指定的出发点
58         success = 1;
59     if(success != 1 && maze[i][j+1] == 0) visit(i, j+1);
60     if(success != 1 && maze[i+1][j] == 0) visit(i+1, j);
61     if(success != 1 && maze[i][j-1] == 0) visit(i, j-1);
62     if(success != 1 && maze[i-1][j] == 0) visit(i-1, j);
63     if(success != 1)
64         maze[i][j] = 0;
65     return success;
66 }
老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。
解法
老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,
无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止
 

 

 

 
posted @ 2020-09-26 15:10  然终酒肆  阅读(309)  评论(0编辑  收藏  举报