首页 > 代码库 > 老鼠走迷宫

老鼠走迷宫

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

技术分享

老鼠走迷宫