资源简介
估价函数为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
- 下一篇:脉冲位置调制
相关资源
- MP3文件ID3v2ID3v2APEv2标签读取
- 课程作业:模拟仓库管理系统
- 北航人工智能原理课大作业源代码,
- 一个简单实用个人日记管理系统
- 带时间温度显示的室内灯光控制系统
- A*算法的2D演示(带源码)
- 成绩管理系统(数据结构)
- FIR低通滤波器 ccs运行环境
- C malloc函数用法
- 嵌入式局域网聊天系统客户端
- 算法竞赛入门经典 第2版刘汝佳+高清
- 基于单片机的GPS定位及显示系统设计
- 链表实现通讯录管理系统
- PowerShell-6.2.1-win-x86.zip
- pl/0编译器 语法分析
- 源程序阅读与调试课程设计报告--学生
- 谁说程序员不浪漫?!基于easyX图形库
- 编译原理课设c编译器
- MCP3421 STM32 Driver
- ADS1100 STM32 Driver
- 单片机89c52与MLX90614红外的测温程序
- stm32f103AES加密 cbc模式
- 单片机 点阵 字模提取软件
- C高级编程讲义-传智播客
- NOIP必学内容之前缀和与差分颜鸿宇
- Skyline高效检索算法实现.zip
- STM8S103系列IO模拟串口通信实现真正串
- stm32f103c8t6移植uC/OS-III基于HAL库的工程
- 温度、一氧化碳、二氧化碳、PM2.5以及
- 王道论坛计算机考研机试指南
评论
共有 条评论