首页 > 编程知识 正文

ncode疲劳分析实例教程,模拟退火算法matlab

时间:2023-05-06 02:57:13 阅读:135356 作者:615

求解回溯法TSP问题求解回溯法TSP问题

人工智能实验报告

实验名称: TSP问题

名称: xxx

学校编号: xxx

xx大学计算机学院

2014年1月14日

实验的目的

掌握递归回溯法的思想,可以解决TSP问题,提高自己的编程能力。

实验内容

下图是5个城市的交通图,城市之间的连接权重表示城市之间的路程费用。 要求从a城出发,只经过其他城市一次,最后回到a城,找到费用最低的电路。 请用伪代码的形式描述设计的算法。

溯法思想:

回溯法(搜索和回溯法)是选良检索法,为了达成目标,在选良条件下进行前方检索。 但是,在探索了某一步的时候,如果原来的选择不优秀或者没有达到目标,就返回一步重新选择。 这样,如果不顺利就返回的技术是回溯法,将满足有回溯条件的状态的点称为“回溯点”。

如果已经有满足约束条件的部分解,请设为(x1,x2,x3,……xi ),I )

算法流程:

递归地调用回溯

不,回去

主要技术:

采用递归回溯法,通过递归调用,节省了代码量,使代码更加简洁易懂。

密钥代码:

voidbacktracking(intcityid,int depth,int len )//所走城市的节点编号所经过的节点数所走的长度

if(cityid==0depth==5) (从/a节点出发并返回到a节点,如果通过所有城市时的长度值正好很小,请替换最小

if(len=Mindis ) (

minDis=len;

保存路径(;

}

返回;

}

if(len=Mindis(//长度值较大时,直接追溯选择下一个城市

返回;

}

for(intI=0; i tab[cityId].size (; I ) { //nodeId表示当前城市,I表示与之相连的城市

连接到cityID城市的城市从未访问过if (has vis [ tab [ cityid ] [ I ].second ]==false )

has vis [ tab [ cityid ] [ I ].second ]=true;

pre [ tab [ cityid ] [ I ].second ]=cityid;

返回跟踪(tab [ cityid ] [ I ].second,depth 1,len tab[cityId][i].first ); //递归调用,直到走完5个节点

pre[tab[cityId][i].second]=-1; //回到上一层

has vis [ tab [ cityid ] [ I ].second ]=false; //false表示没有在这条街上走

}

}

}

将原问题所需的数据存入txt文件,通过读取文件读取主题要求,简化操作

密钥代码:

void getTab ()//用户输入城市信息

int u,//城市u

v,//城市v

w; //uv之间的距离

//printf (inputingendsupwith-1-1-1 (n );

wile(1) {

FP,' %d %d %d ',u,v,w;

if(u==-1v==-1w==-1 ) )

布雷克;

tab[u].push_back(pii(w,v ); //对于城市u来说,uv之间的距离是w

tab[v].push_back(pii(w,u ); //对城市v来说

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。