资源简介
里面含有两种使用C++语言实现的A*算法解决旅行商问题的程序,都可执行且结果精确,并且附带人工智能大作业
代码片段和文件信息
#include“iostream.h“
struct node //城市节点
{
int num;
int fvalue;//f值
int gvalue;//g值
int hvalue;//h值
int level; //层
struct node *parent;//父节点
struct node *next;//后继
struct node *front;//前驱
};
struct final_path
{
struct node *head;
struct node *tail;
}OpenBestpath;
int main()
{
int relation[100][100];//邻接矩阵
int path[100]; //路径点集合
int ijnumber; //number 路径点的数目
int max=0; //存放最大值用于计算h值
int min; //存放最小值用于计算h值
int count; //用于计数
cout<<“ 输入路径点的数目:“;
cin>>number;
for(i=0;i {
path[i]=i+1;//用1,2,3,4.....来表示路径点
}
cout<<“ 按照下例方式(只输入点阵部分)“< <<“ A B C D E . .“< <<“ A . . . . . . .“< <<“ B . . . . . . .“< <<“ C . . . . . . .“< <<“ D . . . . . . .“< <<“ E . . . . . . .“< <<“ . . . . . . . .“< <<“ . . . . . . . .“< <<“输入路径点的关系权(或者邻接矩阵):“<
for(i=0;i {//输入邻接矩阵
for(j=0;j {
cin>>relation[i][j];
if(relation[i][j]>max)max=relation[i][j];
cout<<“ max:“< }
}
min=max;//初始化min
cout<<“ min:“<
for(i=0;i {
for(j=0;j {
if(relation[i][j]==0)continue;
else
{
if(min>relation[i][j])
min=relation[i][j];
}
}
}
cout<<“ min:“<
struct node *p0=new struct node;
p0->level=0;
p0->num=1; //A点
p0->parent=NULL;
path[0]=-1; //默认从第一个路径点开始搜索
Open.head=new struct node;
Open.tail=new struct node;
Open.head->next=Open.tail;
Open.tail->front=Open.head;//初始化Open表
struct node *p1*p2;
struct node *p_min;
struct node *p_temp;
p1=Open.head;
p2=Open.tail;
//p1p2用于确定节点插入Open表的位置
for(i=1;i {//插入节点
struct node *p;
p=new struct node;
p->num=path[i];
p->level=1;//第一层
p->gvalue=relation[0][i];//A点到其他点的距离
p->hvalue=min*(number-p->level-1);
p->fvalue=p->gvalue+p->hvalue;
p->parent=p0;
p1->next=p;
p->front=p1;
p->next=p2;
p2->front=p;
p1=p;
if(i==1)p_min=p1;
else
{//寻找最优路径点
if(p_min->fvalue>p1->fvalue)p_min=p1;
}
}
p_temp=p_min;
//在Open中删除找到的路径点
p_min->front->next=p_min->next;
p_min->next->front=p_min->front;
path[p_min->num-1]=-1;
//扩展找到的路径点(从第二层level=2开始进入循环)
while(1)
{
for(i=0count=0;i {
if(path[i]==-1)
{
count++;
}
}
if(count==number)break;//path数组中所有元素均为-1则退出
else
{
p1=Open.tail->front;
p2=Open.tail;
for(i=0;i {
if(path[i]!=-1)
{
struct node *p;
p=new struct node;
p->num=path[i];
p->level=p_min->level+1; //由最优路径点的level确定子节点的level
p->gvalue=p_min->gvalue+relation[p_min->num-1][i];
p->hvalue=min*(number-p->level-1);
p->fvalue=p->gvalue+p->hvalue;
p->parent=p_min;
p1->next=p;
p->front=p1;
p->next=p2;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2010-12-02 13:33 旅行商问题\
文件 5252 2010-11-30 20:07 旅行商问题\mymain.cpp
文件 185856 2010-12-02 13:00 旅行商问题\S310067007宋新景(作业一).doc
文件 294 2010-11-29 21:49 旅行商问题\作业要求.txt
文件 5496 2010-12-01 19:25 旅行商问题\旅行商问题.cpp
- 上一篇:八数码 -深度优先算法
- 下一篇:UserApp.cpp
相关资源
- A*算法解决八数码问题C++
- A星算法,A*算法C++实现,8数码求解
- A星算法简单直观
- 遗传算法解决TSP问题 旅行商问题 程序
- 人工智能旅行商问题实验报告及C++源
- 迷宫问题A*算法
- A*最短路径算法 最短路径
- 传教士野人渡河带界面
- A*算法 机器人路径规划
- A*算法解迷宫
- C语言实现A*算法解决传教士和野人渡
- 并行蚁群算法解决旅行商问题
- astar实现代码(c)
- 启发式搜索解决八数码问题
- C++实现8方向A*算法
- 蛮力法求解旅行商问题C++
- C++实现的高效A*算法
- 8数码游戏 A*算法 C++实现
- spath(A*算法的C语言源代码)
- 遗传算法求解TSP旅行商问题C语言源代
- 分支限界法求旅行商问题
- 遗传算法求解10城市的旅行商问题的
- A*算法、自动寻路算法C++源码
- A*最佳路径c语言实现算法
- A*算法在ROS上的简单移植
- ROS用A*算法源代码
- vc++2012版A*寻路算法动态演示源程序
- QtC++用动态规划,djistra,Astar,Qlear
- 旅行商问题tsp 三种解决算法
- 八数码C实现
评论
共有 条评论