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无用
悬赏问题
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 Revit2020下载问题
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
- ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数