问题:
利用队列的假出队,实现迷官问题寻解。
要求:
0 墙 1 路, 寻找最短路, 如果有多条,输出其中一条路。

main.c

#include <stdio.h>
#include <stdlib.h>#define M 5
int map[M+2][M+2];
int front = 0, rear = 0;
typedef struct Point_def{int x;int y;int pre;
}Point;
Point q[(M+2)*(M+2)];
typedef struct direction_def{int x;int y;
}Direction;
Direction direct[4] = {{-1,0}, {0,1}, {1,0}, {0, -1}
};
int isEmpty(){return front==rear?1:0;
}
void initMap(){int i, j;for (i=0; i<M+2; i++)for (j=0; j<M+2; j++){if (i == 0 || i == M+1 || j == 0 || j == M+1){map[i][j] = 0; continue;}scanf("%d", &map[i][j]);}
}
void enQueue(Point p){q[rear++] = p;
}
Point deQueue(){if (isEmpty()) exit(1);return q[front++];
}void findPath(int start_x, int start_y, int end_x, int end_y){int flag = 0;int d;int i, j;Point tmp_p1={start_x, start_y, -1};Point tmp_p2;enQueue(tmp_p1);while (!flag){tmp_p1 = deQueue();map[tmp_p1.x][tmp_p1.y] = -1;for (d=0; d<4; d++){i = tmp_p1.x + direct[d].x;j = tmp_p1.y + direct[d].y;if (map[i][j] == 1){tmp_p2.x = i; tmp_p2.y = j; tmp_p2.pre = front-1;enQueue(tmp_p2);}if (i == end_x && j == end_y){tmp_p2.x = i; tmp_p2.y = j; tmp_p2.pre = front-1;enQueue(tmp_p2);flag = 1;  break;}}// end for }// end while
}// end findPathvoid printPath(){int k = rear-1;while (k != -1){printf("(%d,%d)\n", q[k].x, q[k].y);k = q[k].pre;}
}int main(){int flag = 0;int start_x = 1, start_y = 1;int end_x = 5, end_y = 5;initMap();findPath(start_x, start_y, end_x, end_y);printPath();return 0;
}


转载于:https://www.cnblogs.com/laohaozi/p/8266613.html

队列的其本应用_迷官问题相关推荐

  1. 老鼠走迷宫php算法,C语言经典算法 - 老鼠走迷官(一)

    C语言经典算法 - 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下 ...

  2. C++经典算法题-老鼠走迷官(一)

    5.Algorithm Gossip: 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法 ...

  3. C++经典算法题-老鼠走迷官(二)

    6.Algorithm Gossip: 老鼠走迷官(二) 说明 由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径呢? 解法 求所有路径看起来复杂但其实更简单,只要在老鼠走至出 ...

  4. 经典算法大全51例——56.老鼠走迷官

    经典算法大全51例--5&6.老鼠走迷官 算法目录合集 地址 说明 题目以及个人题解 说明 题目 原理分析 问题① 原理 代码实现--Java 问题② 原理 代码实现--Java 相关题目其他 ...

  5. rabbitmq 拉取消息太慢_面试官:消息队列这些我都要问

    作者:mousycoder segmentfault.com/a/1190000021054802 消息队列连环炮 项目里怎么样使用 MQ 的? 为什么要使用消息队列? 消息队列有什么优点和缺点? k ...

  6. mq集群要建传输队列吗_面试官:消息队列这些我必问!

    作者:mousycoder segmentfault.com/a/1190000021054802 消息队列连环炮 项目里怎么样使用 MQ 的? 为什么要使用消息队列? 消息队列有什么优点和缺点? k ...

  7. 保存数组_面试官:讲一讲你对据结构——数组、链表、栈、队列的理解

    一.解释定义 1. 数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.再简单描述一下:数据结构就是描述对象间逻辑关系的学科. 如果还是不太清楚下面会举例说明的. 2. 数据存储结 ...

  8. websphere mq 查看队列中是否有数据_如果面试官再问你消息队列,就把这篇甩给他!...

    ★★★建议星标我们★★★ 公众号改版后文章乱序推荐,希望你可以点击上方"Java进阶架构师",点击右上角,将我们设为★"星标"!这样才不会错过每日进阶架构文章呀 ...

  9. mysql怎么用_面试官都是这样发问的,连环冲锋炮,看你怎么抵挡(上)

    本内容来源于和尚 16 年毕业的学长,先在 58,后阿里,如今准备跳槽了,以下内容为他的最近面试经历 我最近从大厂离职之后在合肥呆了个把月,之前已经准备了半个多月,从7月底开始投简历面试,目前是jav ...

最新文章

  1. 水管工游戏 (深搜)
  2. 使用XML记录数据的一些体会
  3. 利用MySQL数据库来处理中英文取首字母排序
  4. matlab r2012a win10,vs2010和Matlab R2012a 混合编程
  5. Cannot resolve method ‘call(java.lang.String, org.apache.flink.table.api.ApiExpression)‘
  6. 启动NameNode和DataNode
  7. FlashFXP列表参数错误解决方法
  8. php转换编码去掉bom,UTF-8编码怎么去掉BOM头?
  9. 不要打我,不要打我,不要打我啊啊
  10. 获取properties文件的内容的几种方式
  11. nohup rabbitmq python
  12. paip.解决中文url路径的问题图片文件不能显示
  13. Linux基本操作和基础命令(Linux修改IP地址以及修改网卡地址)
  14. [计算机英语]句子翻译(只含unit1.3.4.5.7.8.9.12)
  15. SLAM AR 技术与应用
  16. 第2章:Android的编译环境--build系统
  17. PDF页面太大要如何才能缩小?
  18. 华为gt3智能跑步计划体验:心率监测、gps轨迹、训练计划
  19. 三十二位计算机游戏推荐,这32种课间游戏不重样,总有一款适合您和学生!| 推荐收藏...
  20. python3 爬煎蛋ooxx妹子图

热门文章

  1. 浅析NTFS 文件系统数据流安全问题
  2. day01 python基本概念
  3. bfs理解——hdu6386好题
  4. PhpStorm配置SVN的完整方法
  5. YaoLingJump开发者日志(七)
  6. linux桥接模式下配置静态ip
  7. phpmyadmin教程:使用phpmyadmin创建用户
  8. Sharepoint学习笔记---Linq to Sharepoint--查询语法
  9. Qt设置QWidget背景色4种方法
  10. C#序列化与反序列化以及深拷贝浅拷贝方法