迷宫问题(递归)
作者:互联网
1 #define _CRT_SECURE_NO_WARNINGS 2 #define N 5 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 typedef struct coordinate 7 { 8 int x; 9 int y; 10 }COOR; 11 12 void Show();//打印地图 13 bool Find(COOR s, COOR dir);//寻路 14 15 int map[N][N] = { 16 {1,1,1,1,1}, 17 {1,0,0,0,1}, 18 {1,0,1,0,1}, 19 {1,0,0,0,1}, 20 {1,1,1,1,1}, 21 };//迷宫地图 22 23 24 int main(void) 25 { 26 COOR s = {1,1};//出发地 27 COOR dir = { 3, 3 };//目的地 28 if (Find(s, dir) == 0)//寻路无解 29 { 30 printf("\n该迷宫无解!\n"); 31 } 32 else 33 { 34 printf("\n寻路成功!\n"); 35 Show(); 36 } 37 38 system("pause"); 39 return 0; 40 } 41 42 void Show()//打印地图 43 { 44 int i, j; 45 for (i = 0; i < N; i++) 46 { 47 for (j = 0; j < N; j++) 48 { 49 printf("%d", map[i][j]); 50 } 51 printf("\n"); 52 } 53 } 54 55 bool Find(COOR s, COOR dir)//寻路 56 { 57 int i; 58 if (s.x == dir.x && s.y == dir.y) 59 { 60 printf("(%d,%d)", s.x, s.y); 61 return true; 62 } 63 if (map[s.y][s.x] == 0)//当前路径可行 64 { 65 map[s.y][s.x] = 2;//正确路线 66 67 COOR right = { s.x + 1, s.y };//向右走 68 if (Find(right, dir) == true) 69 { 70 printf("(%d,%d)", s.x, s.y); 71 return true; 72 } 73 74 COOR down = { s.x, s.y + 1 };//向下走 75 if(Find(down, dir) == true) 76 { 77 printf("(%d,%d)", s.x, s.y); 78 return true; 79 } 80 81 COOR left = { s.x - 1, s.y };//向左走 82 if (Find(left, dir) == true) 83 { 84 printf("(%d,%d)", s.x, s.y); 85 return true; 86 } 87 88 COOR up = { s.x, s.y - 1 };//向上走 89 if (Find(up, dir) == true) 90 { 91 printf("(%d,%d)", s.x, s.y); 92 return true; 93 } 94 95 map[s.y][s.x] = 3; 96 return false;//四个方向都不通 97 } 98 return false;//寻路失败 99 }
标签:COOR,return,递归,迷宫,问题,printf,true,Find,dir 来源: https://www.cnblogs.com/lvhui123/p/15689818.html