老鼠走迷宫
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了老鼠走迷宫相关的知识,希望对你有一定的参考价值。
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 }
以上是关于老鼠走迷宫的主要内容,如果未能解决你的问题,请参考以下文章