资源简介
一个迷宫最短路径寻径算法,可显示迷宫,路径。可修改迷宫。

代码片段和文件信息
#include
#include
#include “linkedQueue.h“
using namespace std;
const int size=20;
//全局变量:迷宫地图
int maze[size][size];
//0-路1-墙2-起点3-终点
//四个方向:上下左右可走,若要调八方向亦可
//A*算法,找最短路径
struct markDot{
int rowcol;//行列
int distance;//距离
markDot(){
}
markDot(int xint yint dis){
row=x;col=y;distance=dis;
}
};
bool FindPath(){
int ij;
int sxsyexey;//起讫点坐标
int mark[size][size];
//找起讫点
for(i=0;i for(j=0;j if(maze[i][j]==2){
sx=i;
sy=j;
}else if(maze[i][j]==3){
ex=i;
ey=j;
}
mark[i][j]=-1;//未标记
}
}
/*
VC++6.0编译器居然不能提示模板在外部定义的函数fuck
bool EnQueue(const T &x);
bool DeQueue(T &x);
bool getFront(T &x)const;
*/
markDot start(sxsy0);
markDot end(exey0);//this 0 is temperary
markDot direction[4];//这个办法做4个方向蛮巧的,我一下还没想到
//0-up1-down2-left3-right
direction[0].row=-1;direction[0].col=0;
direction[1].row=1;direction[1].col=0;
direction[2].row=0;direction[2].col=-1;
direction[3].row=0;direction[3].col=1;
linkedQueue Q;
Q.EnQueue(start);
linkNode *now;
//now=Q.front;
markDot addendpoint;
int tempxtempy;
bool markfinish=false;
while(1)
{
now=Q.front;
for(i=0;i<4;i++)
{
tempx=Q.front->data.row+direction[i].row;
tempy=Q.front->data.col+direction[i].col;
if(tempx<0 || tempx>=size || tempy<0 || tempy>=size){
continue;
}
if(mark[tempx][tempy]==-1){
//尚未标记
if(maze[tempx][tempy]==0){
//这是路可以走
mark[tempx][tempy]=Q.front->data.distance+1;//标记为到起点距离
add.row=tempx;add.col=tempy;add.distance=mark[tempx][tempy];
Q.EnQueue(add);
}else if(maze[tempx][tempy]==3){
//找到终点
mark[tempx][tempy]=Q.front->data.distance+1;//标记为到起点距离
add.row=tempx;add.col=tempy;add.distance=mark[tempx][tempy];
Q.EnQueue(add);
endpoint=add;
markfinish=true;
//break;
}else if(maze[tempx][tempy]==1){
mark[tempx][tempy]=-2;//此路不通
}else{
//标记过的路
continue;
}
}
}
//4个方向遍历完
Q.DeQueue(add);//删
if(Q.IsEmpty()){
return false;
}
if(markfinish){
break;
}
}
int pathlen=endpoint.distance;
markDot *path;
path=new markDot[pathlen+1];
int txty;
tempx=ex;tempy=ey;
path[pathlen].row=ex; path[pathlen].col=ey; path[pathlen].distance=pathlen;
for(j=pathlen-1;j>=0;j--){
for(i=0;i<4;i++){
tx=tempx+direction[i].row; ty=tempy+direction[i].col;
if(tx<0 || tx>=size || ty<0 || ty>=size){
continue;
}
if(j==mark[tx][ty]){
path[j].row=tx;
path[j].col=ty;
path[j].distance=j;
tempx=tx;tempy=ty;
break;
}
}
}
//draw the map;
int l;
bool isroute=false;
cout< for(i=0;i for(j=0;j
isroute=false;
for(l=0;l<=pathlen;l++){
if(i==path[l].row && j==path[l].col){
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 299101 2012-10-12 15:21 A星迷宫\Debug\maze.obj
文件 82944 2012-10-12 15:21 A星迷宫\Debug\vc60.idb
文件 110592 2012-10-12 15:21 A星迷宫\Debug\vc60.pdb
文件 565303 2012-10-12 15:21 A星迷宫\Debug\迷宫.exe
文件 810764 2012-10-12 15:21 A星迷宫\Debug\迷宫.ilk
文件 2129332 2012-10-11 21:36 A星迷宫\Debug\迷宫.pch
文件 1123328 2012-10-12 15:21 A星迷宫\Debug\迷宫.pdb
文件 2113 2012-10-11 21:04 A星迷宫\li
文件 4055 2012-10-12 15:21 A星迷宫\maze.cpp
文件 818 2012-10-11 21:33 A星迷宫\maze.txt
文件 818 2012-10-11 21:33 A星迷宫\maze20展示最短路.txt
文件 136 2012-10-11 21:12 A星迷宫\maze8.txt
文件 4320 2012-10-10 19:35 A星迷宫\迷宫.dsp
文件 533 2012-10-10 19:12 A星迷宫\迷宫.dsw
文件 50176 2012-10-12 15:21 A星迷宫\迷宫.ncb
文件 49664 2012-10-12 15:21 A星迷宫\迷宫.opt
文件 1250 2012-10-12 15:21 A星迷宫\迷宫.plg
目录 0 2012-10-12 15:21 A星迷宫\Debug
目录 0 2012-10-12 15:21 A星迷宫
----------- --------- ---------- ----- ----
5235247 19
- 上一篇:arp欺骗C++实现
- 下一篇:pcm语音编码
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 数据结构,迷宫问题C语言版源代码
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
评论
共有 条评论