资源简介
估价函数为f(n)=h(n)+g(n)。其中h(n)表示已经走过的实际路程。g(n)表示未走过路程到终点(起点)最短的距离。
代码片段和文件信息
#include“Astar.h“
//根据估价值排序
void sortNode(NodeState* pint l)
{
int n=l;
for(int i=0;i {
for(int j=0;j {
if((p->children[j]->f)>(p->children[j+1]->f))
{
NodeState *temp=p->children[j];
p->children[j]=p->children[j+1];
p->children[j+1]=temp;
}
}
}
}
void cpyRoad(int dis[]int src[]int len)
{
for(int i=0;i dis[i]=src[i];
}
int getLen(int iint jMap map)
{
return i }
void initNode(NodeState* nodeint n)
{
node->road=(int*)malloc(sizeof(int)*n);//分配路径
for(int i=0;i node->road[i]=0;
node->f=node->roadLen=0;
node->cityNum=n;
node->children=(NodeState **)malloc(sizeof(NodeState*)*n-1);//最多的子节点数目
for(int i=0;i node->children[i]=NULL;
}
void getNext(int road[]int nextCitys[]int n)
{
int j=0;
for(int i=0;i {
if(!road[i]) //没走过
{
nextCitys[j]=i;
j++;
}
}
}
Map inputMap()
{
Map map;
int n=0;
printf(“获得距离矩阵先输入城市数目:“);
scanf(“%d“&n);
getchar();
map.num=n;
map.rec=(int*)malloc(sizeof(int)*n*n); //n方
printf(“输入数据:\n“);
for(int i=0;i for(int j=i+1;j {
printf(“%c->%c:“STRING[i]STRING[j]);
scanf(“%d“&(map.rec[i+j*n]));
getchar();
}
return map;
}
int nearest(int road[]Map map)
{
int min=MAXNUM;
bool flag=false; //判断是否还有没走过节点
for(int i=0;i {
if(!road[i]) //没走过
{
flag=true;
int len=getLen(0imap); //第i个城市到终点距离 上层保证i>0
if(len min=len;
}
}
if(!flag)
return 0;
return min;
}
bool AStar(NodeState& nodeMap map)
{
//递归出口
if(node.cityNum==map.num) //路径满
{
node.roadLen+=getLen(node.city0map);
return false;
}
int l=map.num-node.cityNum; //剩下的城市数
int* nextCitys=(int *)malloc(sizeof(int)*l);
getNext(node.roadnextCitysmap.num); //得到剩下城市名(索引)
//初始化子节点
for(int i=0;i {
node.children[i]=(NodeState *)malloc(sizeof(NodeState));//分配一个子节点内存
initNode(node.children[i]map.num); //初始化子节点
cpyRoad(node.children[i]->roadnode.roadmap.num); //获得之前走过的路径
node.children[i]->road[nextCitys[i]]=node.cityNum+1; //在路径上加上该子节点
node.children[i]->city=nextCitys[i];
node.children[i]->cityNum=node.cityNum+1; //该节点顺位
node.children[i]->roadLen=node.roadLen+getLen(node.citynode.children[i]->citymap); //新的路径长度
node.children[i]->f=node.children[i]->roadLen+nearest(node.roadmap); //计算估价值 最后一个节点f值不准
}
//根据估价值排序
sortNode(&nodel);
//向下搜索
bool toFind=true; //是否继续搜索
for(int i=0;i {
if(toFind) //发现结果就不用继续递归了
toFind=AStar(*node.children[i]map);
}
return toFind;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-04-28 23:19 源码\
目录 0 2014-04-28 21:33 源码\AstartAboutTraveller\
目录 0 2014-04-26 16:21 源码\AstartAboutTraveller\AstartAboutTraveller\
文件 2248704 2014-04-28 21:33 源码\AstartAboutTraveller\AstartAboutTraveller.sdf
文件 927 2014-04-26 12:41 源码\AstartAboutTraveller\AstartAboutTraveller.sln
文件 15872 2014-04-28 21:33 源码\AstartAboutTraveller\AstartAboutTraveller.suo
文件 3086 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Astar.cpp
文件 1735 2014-04-26 17:07 源码\AstartAboutTraveller\AstartAboutTraveller\Astar.h
文件 4076 2014-04-26 16:33 源码\AstartAboutTraveller\AstartAboutTraveller\AstartAboutTraveller.vcxproj
文件 1238 2014-04-26 16:33 源码\AstartAboutTraveller\AstartAboutTraveller\AstartAboutTraveller.vcxproj.filters
文件 143 2014-04-26 12:41 源码\AstartAboutTraveller\AstartAboutTraveller\AstartAboutTraveller.vcxproj.user
目录 0 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\
文件 14378 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\Astar.obj
文件 406 2014-04-26 15:00 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\AstartAboutTraveller.exe.em
文件 472 2014-04-26 15:00 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\AstartAboutTraveller.exe.em
文件 381 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\AstartAboutTraveller.exe.intermediate.manifest
文件 105 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\AstartAboutTraveller.lastbuildstate
文件 3314 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\AstartAboutTraveller.log
文件 713 2014-04-26 15:44 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\AstartAboutTraveller.vcxprojResolveAssemblyReference.cache
文件 0 2014-04-26 15:00 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\AstartAboutTraveller.write.1.tlog
文件 230 2014-04-26 15:00 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\AstartAboutTraveller_manifest.rc
文件 1542 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\cl.command.1.tlog
文件 2556 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\CL.read.1.tlog
文件 1710 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\CL.write.1.tlog
文件 2 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\li
文件 2 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\li
文件 2 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\li
文件 2 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\li
文件 2 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\li
文件 2 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\li
文件 2060 2014-04-28 21:28 源码\AstartAboutTraveller\AstartAboutTraveller\Debug\li
............此处省略42个文件信息
- 上一篇:OrCAD10.5软件精简版.rar
- 下一篇:脉冲位置调制
相关资源
- 智能车载空气净化器的完整设计
- 单片机课程设计:数字电压表8路通道
- 无人超市管理系统.rar
- stm8 红外收发
- C Primer Plus (第6版) 中文版 mobi Kin
- PIX4飞控+光流源代码
- 《Linux C编程一站式学习》
- 图灵程序设计丛书:征服C指针
- The C Programming Language中文第2版.pdf
- 飞思卡尔智能车程序
- 基于ARM的模拟钢琴
- 实现QQ注册登录并保存注册信息源码
- 基于51单片机的数字电压表.rar
- COMP51编译器
- C程序设计语言高清带目录非扫描版
- 电子时钟/万年历设计报告 基于AT89c
- 学生校园消费管理系统课程报告
- DSP281x官方头文件及例程
- linux下ftp客户端程序的C实现
- LKHWin-3.0.2
- Linux_C编程一站式学习_最新版.pdf
- 徐士良C常用算法程序集第三版高清电
- 学生管理系统-windows
- 实现任意多边形的最小外接圆
- 最炫——飞机票信息管理系统源码
- c 文件读写代码
- STM32F103C8 2路PWM捕捉 2路串口输出
- 通过STM32F407对BH1750光照度传感器采集
- C程序设计语言_第二版新版习题解答
- 无线龙CC1110试验例程
评论
共有 条评论