資源簡介
估價函數為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
- 下一篇:脈沖位置調制
評論
共有 條評論