清华OJ:PA2-3 旅行商(TSP)最简解决方案

注:本文只提供一个基本的简明的解决方案,至于如何理解拓扑排序,题目与拓扑排序之间更深层的联系等不作讨论。题目:https://dsa.cs.tsinghua.edu.cn/oj/problem.shtml?id=1147分析:题目提示使用拓扑排序,那么算法一定是基于拓扑排序的框架再加一些额外的操作,于是有两个关键点,写对了,就能满分:1.拓扑排序:策略:将所有入度为0的顶点入栈...
摘要由CSDN通过智能技术生成

注:本文只提供一个基本的简明的解决方案,至于如何理解拓扑排序,题目与拓扑排序之间更深层的联系等不作讨论。

题目:https://dsa.cs.tsinghua.edu.cn/oj/problem.shtml?id=1147

分析:

题目提示使用拓扑排序,那么算法一定是基于拓扑排序的框架再加一些额外的操作,于是有两个关键点,写对了,就能满分:

1.拓扑排序:

策略:将所有入度为0的顶点入栈,弹出栈顶元素,若此元素存在入度为1的邻居,将其入栈并将此邻居的入度-1,重复直到栈空。

实现:

void TSort(){
	for(int k=0;k<n;k++)if(!adjList[k].in)stack[++top]=k;
	while(top){
		int v=stack[top--];
		for(ENode *p=adjList[v].fstEdge;p;p=p->succ){	
			if(!(--adjList[p->vsub].in))stack[++top]=p->vsub;
		}
	}	
}

2.将题意与拓扑排序结合:

题目需要求的变量可等效地理解为求图的最大路径上的顶点数,注意到根据此题,顶点数=路径长度+1,于是问题转换为求图的最大路径长度,而图的最大路径长度就是到所有顶点的最大路径长

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值