数据结构例程——迷宫问题(用队列)
来源:互联网 发布:java程序员工作内容 编辑:程序博客网 时间:2024/05/16 18:08
本文针对数据结构基础系列网络课程(3):栈和队列中第11课时队列的应用-迷宫问题。
例:求出从入口到出口的路径
代码:
#include <stdio.h>#define MaxSize 100#define M 8#define N 8int mg[M+2][N+2]={ {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,0,0,1,1,0,0,1}, {1,0,1,1,1,0,0,0,0,1}, {1,0,0,0,1,0,0,0,0,1}, {1,0,1,0,0,0,1,0,0,1}, {1,0,1,1,1,0,1,1,0,1}, {1,1,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1}};typedef struct{ int i,j; //方块的位置 int pre; //本路径中上一方块在队列中的下标} Box; //方块类型typedef struct{ Box data[MaxSize]; int front,rear; //队头指针和队尾指针} QuType; //定义顺序队类型void print(QuType qu,int front) //从队列qu中输出路径{ int k=front,j,ns=0; printf("\n"); do //反向找到最短路径,将该路径上的方块的pre成员设置成-1 { j=k; k=qu.data[k].pre; qu.data[j].pre=-1; } while (k!=0); printf("迷宫路径如下:\n"); k=0; while (k<=front) //正向搜索到pre为-1的方块,即构成正向的路径 { 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"); //每输出每5个方块后换一行 } k++; } printf("\n");}int mgpath(int xi,int yi,int xe,int ye) //搜索路径为:(xi,yi)->(xe,ye){ int i,j,find=0,di; QuType qu; //定义顺序队 qu.front=qu.rear=-1; qu.rear++; qu.data[qu.rear].i=xi; qu.data[qu.rear].j=yi; //(xi,yi)进队 qu.data[qu.rear].pre=-1; mg[xi][yi]=-1; //将其赋值-1,以避免回过来重复搜索 while (qu.front!=qu.rear && !find) //队列不为空且未找到路径时循环 { qu.front++; //出队,由于不是环形队列,该出队元素仍在队列中 i=qu.data[qu.front].i; j=qu.data[qu.front].j; if (i==xe && j==ye) //找到了出口,输出路径 { find=1; print(qu,qu.front); //调用print函数输出路径 return(1); //找到一条路径时返回1 } for (di=0; di<4; di++) //循环扫描每个方位,把每个可走的方块插入队列中 { switch(di) { case 0: i=qu.data[qu.front].i-1; j=qu.data[qu.front].j; break; case 1: i=qu.data[qu.front].i; j=qu.data[qu.front].j+1; break; case 2: i=qu.data[qu.front].i+1; j=qu.data[qu.front].j; break; case 3: i=qu.data[qu.front].i, j=qu.data[qu.front].j-1; break; } if (mg[i][j]==0) { qu.rear++; //将该相邻方块插入到队列中 qu.data[qu.rear].i=i; qu.data[qu.rear].j=j; qu.data[qu.rear].pre=qu.front; //指向路径中上一个方块的下标 mg[i][j]=-1; //将其赋值-1,以避免回过来重复搜索 } } } return(0); //未找到一条路径时返回1}int main(){ mgpath(1,1,M,N); return 0;}
0 0
- 数据结构例程——迷宫问题(用队列)
- 数据结构例程——迷宫问题(用栈结构)
- 数据结构 — 迷宫问题
- 数据结构——迷宫问题
- 数据结构复习 队列(迷宫)
- 第六周--数据结构之自建算法库之迷宫问题(用队列)
- 数据结构:栈和队列-迷宫问题求解
- 数据结构 C语言 队列 迷宫问题
- 数据结构——用栈解决简单迷宫问题
- 用队列解迷宫问题
- 数据结构例程——表达式求值(用栈结构)
- 数据结构和算法设计(迷宫求解问题的栈和队列的实现)
- [数据结构] 迷宫问题(栈和队列,深搜和广搜)
- 数据结构(C语言版)”栈与队列“章节迷宫求解问题的思路与实现
- 数据结构-顺序队列解决最短迷宫路径问题
- 队列的应用——求解迷宫问题
- 数据结构例程——哈夫曼树
- 数据结构例程——二叉排序树
- 数据结构面试题1.2.6-Top K算法详细解析——百度面试题
- JDK源码阅读之Iterable接口,使你的类可以迭代遍历
- C#创建Windows服务程序
- VMWare虚拟机提示:锁定文件失败,打不开磁盘的解决办法
- 详细理解TranslateAnimation
- 数据结构例程——迷宫问题(用队列)
- android中进程小记(感谢海洋哥)
- Redis安全设置 - 设置密码、禁用指令
- 货物链表类代码
- Innodb中的事务隔离级别和锁的关系
- 使用C语言操作MySQL数据库
- svn 密码清除
- phpstorm 多个项目管理
- lua基础(1)