#include <stdio.h>
#include <stdlib.h>
#define M 4
#define N 4
#define MaxSize 10
int mg[M + 2][N + 2] = {{1,1,1,1,1,1},{1,0,1,0,0,1},{1,0,0,0,1,1},{1,1,0,1,1,1},{1,1,0,0,0,1},{1,1,1,1,1,1}
};
typedef struct
{int i;//行int j;//列int pre;//上一个方块在队列中的下标
}Box;
typedef struct
{Box data[MaxSize];int front;//队头指针int rear;//队尾指针
}SqQueue;
void InitQueue(SqQueue*& q)
{q = (SqQueue*)malloc(sizeof(SqQueue));q->front = q->rear = -1;
}
void DestroyQueue(SqQueue*& q)
{free(q);
}
bool QueueEmpty(SqQueue* q)
{return (q->front == q->rear);
}
bool enQueue(SqQueue*& q, Box e)
{if (q->rear == MaxSize - 1){return false;}q->rear++;q->data[q->rear] = e;return true;
}
bool deQueue(SqQueue*& q, Box& e)
{if (q->front == q->rear){return false;}q->front++;e = q->data[q->front];return true;
}
bool mgpath(int xi, int yi, int xe, int ye) {Box e;int i, j, di, i1, j1;SqQueue* qu;InitQueue(qu);e.i = xi;e.j = yi;e.pre = -1;enQueue(qu, e);mg[xi][yi] = -1;while (!QueueEmpty(qu)) {deQueue(qu, e);//只是将front++取出队中元素,该元素仍在队列(数组)中i = e.i;j = e.j;if (i == xe && j == ye) {void print(SqQueue * qu, int front);print(qu, qu->front);DestroyQueue(qu);return true;}for (di = 0; di < 4; di++) {switch (di) {case 0:i1 = i - 1; j1 = j; break;case 1:i1 = i; j1 = j + 1; break;case 2:i1 = i + 1; j1 = j; break;case 3:i1 = i; j1 = j - 1; break;}if (mg[i1][j1] == 0) {e.i = i1;e.j = j1;e.pre = qu->front;enQueue(qu, e);mg[i1][j1] = -1;}}}DestroyQueue(qu);return false;
}
void print(SqQueue* qu, int front) {int k = front, j, ns = 0;  //front值为终点在队列中的下标printf("\n");do {j = k;              //j为该方块在队列中的下标k = qu->data[k].pre;//k为前一个方块在队列中的下标qu->data[j].pre = -1;} while (k != 0);k = 0;printf("路径如下:\n");while (k < MaxSize) {if (qu->data[k].pre == -1) {ns++;printf("\t(%d,%d)", qu->data[k].i, qu->data[k].j);if (ns % 5 == 0) {printf("\n");}}k++;}printf("\n");
}
int main() {if (!mgpath(1, 1, M, N)) {printf("未找到解答");}return 1;
}

C语言利用队列求解迷宫问题相关推荐

  1. 栈和队列求解迷宫问题(数据结构学习笔记)

    文章目录 迷宫问题 "栈"求解迷宫问题 行走规则 算法思路 算法代码 栈的定义 算法设计 完整代码 最终迷宫路径 算法总结 "队列"求解迷宫问题 算法思路 算法 ...

  2. 迷宫问题 java 队列_利用队列解决迷宫问题

    首先定义节点的数据类型: //定义节点的数据结构 class Node{ int x; int y; Node next; public Node(int x,int y) { // TODO Aut ...

  3. C语言利用差分法求解泊松方程

    C语言实现二维泊松方程五点差分法 给定一个泊松方程如下, { − Δ u = f  in  Ω , u =

  4. 顺序队列求解迷宫问题

    总结一句话:队头走队尾走过的路(即队尾入队.队头出队),队尾扫描队头附近的路并将其入队.显然,如果是有路可走的话,队尾附近的点肯定至少有一个入队,即队头追不上队尾(队不会空),如果追上了说明无路可走. ...

  5. 栈、队列和数组(包括求解迷宫问题)

    1.1 琐碎知识点 栈.队列.数组是线性存储结构,它们都是一段连续的内存空间,其中栈和队列是动态的,而数组是静态的.它们的区别在于: 栈:后进先出,只能在栈顶进行插入和删除操作. 队列:先进先出,只能 ...

  6. 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)

    // algo3-11.cpp 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径) #include"c1.h" #include"func3-1.cpp" ...

  7. 迷宫问题的三种求解方法(递归求解、回溯求解和队列求解)

    目录 一.迷宫问题的三种求解方法 递归求解 回溯求解 队列求解 二.华为迷宫问题 一.迷宫问题的三种求解方法 在迷宫问题中,给定入口和出口,要求找到路径.本文将讨论三种求解方法,递归求解.回溯求解和队 ...

  8. c语言迷宫游戏怎么存放坐标,求解迷宫问题(c语言,很详细哦

    <求解迷宫问题(c语言,很详细哦>由会员分享,可在线阅读,更多相关<求解迷宫问题(c语言,很详细哦(5页珍藏版)>请在人人文库网上搜索. 1.求迷宫问题就是求出从入口到出口的路 ...

  9. 基于队列的迷宫求解实现

    # 基于队列的迷宫求解def que_find(maze,pos,end):if pos == end:print('已找到')return Trueque = Queue()mark(maze,po ...

最新文章

  1. 堆栈,静态变量和普通变量,静态函数和普通函数的区别
  2. 利用Trigger完成WPF 的动画-渐显
  3. python des解密_python实现DES加密解密方法实例详解
  4. jQuery 元素操作——遍历元素
  5. python中的matplotlib(1)
  6. 【C语言简单说】六:取模运算符以及变量的扩展
  7. 碰上这种 Wi-Fi,iPhone 秒崩!
  8. 【C++】递归 课后习题3-13、3-14
  9. DevExpress GridControl双击获取行内容
  10. Linux下7z工具安装
  11. 一卡通(M1卡)破解过程记录——获取扇区密钥
  12. 联想服务器忘记系统登录密码,联想路由器登陆密码忘记了怎么办
  13. Python使用百度地图API实现地点信息转换及房价指数热力地图
  14. 为什么我不建议你裸辞做自媒体?
  15. python汇率换算程序_Python编写一个汇率兑换程序
  16. qs计算机圣安排名,圣安德鲁斯大学世界排名及专业排名汇总(QS世界大学排名版)...
  17. 计算机课说话检查200字,上课说话检讨书200字(精选10篇)
  18. Proxmox VE ZFS 开启Thin Provision(精简配置)
  19. 获取微信公众号图文封面图的方法
  20. 腾讯实时音视频通话sdk集成----小程序版本

热门文章

  1. windows安装kali linux系统kali linux镜像安装。
  2. 【Java——猜数小游戏】
  3. 查看进程树(pstree,ps)、杀进程(kill,killall,pkill)
  4. Boost型开关电源应用之TPS54340
  5. 为什么qt改不了ui的字体_为您的UI选择最佳字体
  6. 你还不知道中国有多少人口?
  7. js-实现微信聊天界面
  8. 家庭服务器智能路由器,再谈路由器智能化颠覆:新家庭信息中心
  9. Docker 配置阿里镜像加速(mac)
  10. Sahi案例分享:音乐批量下载