老鼠走迷宫问题,具体解释写在注释中,思考即可
代码如下
1 /*int jerry[7][7]={{2,2,2,2,2,2,2}, 2 {2,0,0,0,0,0,2}, 3 {2,0,2,0,2,0,2}, 4 {2,0,0,2,0,2,2}, 5 {2,2,0,2,0,2,2}, 6 {2,0,0,0,0,0,2}, 7 {2,2,2,2,2,2,2}} 8 老鼠走迷宫问题 9 */ 10 11 #include<stdio.h> 12 int walk(int,int); 13 int jerry[7][7]={{2,2,2,2,2,2,2},//定义一个7*7的二维数组 14 {2,0,0,0,0,0,2}, 15 {2,0,2,0,2,0,2}, 16 {2,0,0,2,0,2,2}, 17 {2,2,0,2,0,2,2}, 18 {2,0,0,0,0,0,2}, 19 {2,2,2,2,2,2,2}}; 20 int success=0; 21 int sti=1,stj=1;//定义入口 22 int endi=5,endj=5;//定义出口 23 24 25 int main(){ 26 int i,j; 27 printf("显示出迷宫的样子: "); 28 for(i=0;i<7;i++){ 29 for(j=0;j<7;j++) 30 { 31 if(jerry[i][j]==2) 32 printf("A ");//如果遍历到墙则输出A 33 else 34 printf("B "); 35 } 36 printf(" "); 37 } 38 printf(" "); 39 printf("开始走迷宫: "); 40 if(walk(sti,stj)==0)//如果以sti和stj为入口值一直不为1,则说明寻找出口失败 41 printf("没有找到出口"); 42 else{ 43 for(i=0;i<7;i++){ 44 for(j=0;j<7;j++) 45 { 46 if(jerry[i][j]==2)//遍历到墙则输出A 47 printf("A "); 48 else if(jerry[i][j]==1)//遍历到1则输出C,代表老鼠的路径 49 printf("C "); 50 else 51 printf("B "); 52 } 53 printf(" "); 54 } 55 } 56 } 57 58 int walk(int i,int j)//走一个函数,把老鼠jerry定在i,j位置 59 { 60 jerry[i][j]=1;//在ij位置开始走,初值定为1 61 if(i==endi&&j==endj)//如果走到endi和endj位置,则输出success为1 62 { 63 success=1; 64 } 65 if(success!=1&&jerry[i][j+1]==0){//路径不成功且右位置的值为0(模拟右移) 66 walk(i,j+1);//把老鼠位置定在i,j+1 67 } 68 if(success!=1&&jerry[i+1][j]==0){//路径不成功且下位置的值为0(模拟下移) 69 walk(i+1,j);//把老鼠位置定在i+1,j 70 }if(success!=1&&jerry[i][j-1]==0){//路径不成功且左位置的值为0(模拟左移) 71 walk(i,j-1);//把老鼠位置定在i,j-1 72 }if(success!=1&&jerry[i-1][j]==0){//路径不成功且上位置的值为0(模拟上移) 73 walk(i-1,j);//把老鼠位置定在i-1,j 74 } 75 if(success!=1)//只要模拟路径失败 76 { 77 jerry[i][j]=0;//即把当前值定位0,不计入路径之中 78 } 79 80 return success; 81 }
本文摘自 :https://www.cnblogs.com/