C语言
2表示墙,0表示通路,3表示入口,4表示出口。只能用指针访问数组中的数据,只能走直线。路线用坐标表示。
{2,3,2,2,2,2,2,2,2,2},
{2,0,0,0,0,0,2,0,0,2},
{2,0,2,0,2,0,0,0,0,2},
{2,0,0,2,0,2,0,0,0,2},
{2,2,0,2,0,2,0,2,0,2},
{2,0,0,0,0,0,0,0,0,2},
{2,2,2,0,2,2,0,2,0,2}
{2,2,2,0,2,2,0,0,0,2}
{2,2,0,2,2,2,0,0,0,2}
{2,2,2,2,2,2,2,2,4,2}
关于#c语言#的问题:迷宫出路
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CSDN专家-天际的海浪 2022-01-02 04:26关注
你题目的解答代码如下:
#include <stdio.h> #include <stdlib.h> #define M 10 #define N 10 #define Max 100 int mg[M][N] = {//2表示墙,0表示通路,3表示入口,4表示出口 {2,3,2,2,2,2,2,2,2,2}, {2,0,0,0,0,0,2,0,0,2}, {2,0,2,0,2,0,0,0,0,2}, {2,0,0,2,0,2,0,0,0,2}, {2,2,0,2,0,2,0,2,0,2}, {2,0,0,0,0,0,0,0,0,2}, {2,2,2,0,2,2,0,2,0,2}, {2,2,2,0,2,2,0,0,0,2}, {2,2,0,2,2,2,0,0,0,2}, {2,2,2,2,2,2,2,2,4,2} }; struct { int i, j; //块的位置 int pre; //本路径中上一块在队列中的下标 } Qu[Max]; int front = -1, rear = -1; void print(int n); int mgpath(int xi, int yi, int xe, int ye) //搜索算法 { int i, j, find = 0, di; rear++; Qu[rear].i = xi; Qu[rear].j = yi; Qu[rear].pre = -1; mg[xi][yi] = -1; while (front <= rear && !find) { front++; i = Qu[front].i; j = Qu[front].j; if (i == xe && j == ye) { find = 1; print(front); return (1); } for (di = 0; di < 4; di++) { switch (di) //四个方向 { case 0: i = Qu[front].i - 1; j = Qu[front].j; break; case 1: i = Qu[front].i; j = Qu[front].j + 1; break; case 2: i = Qu[front].i + 1; j = Qu[front].j; break; case 3: i = Qu[front].i; j = Qu[front].j - 1; break; } if (i>=0 && i<M && j>=0 && j<N && (mg[i][j] == 0 || mg[i][j] == 4)) { rear++; Qu[rear].i = i; Qu[rear].j = j; Qu[rear].pre = front; mg[i][j] = -1; //避免死循环 } } } return 0; } void print(int n) //输出 路径算法 { int k = n, j; printf("\n"); do //将输出的路径上的所有pre改为-1 { j = k; k = Qu[k].pre; Qu[j].pre = -1; } while (k != 0); printf("迷宫最短路径如下:\n"); k = 0; while (k < Max) { if (Qu[k].pre == -1) { printf("(%d,%d) ", Qu[k].i, Qu[k].j); } k++; } printf("\n"); } int main() { int i,j, xi, yi, xe, ye; for (i = 0; i<M; i++) { for (j = 0; j<N; j++) { if (mg[i][j]==3) { xi = i; yi = j; } else if (mg[i][j]==4) { xe = i; ye = j; } } } mgpath(xi, yi, xe, ye); system("pause"); return 0; }
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥170 如图所示配置eNSP
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改
- ¥20 wireshark抓不到vlan
- ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
- ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥15 键盘指令混乱情况下的启动盘系统重装