ZJU2027 Travelling Fee - 最短路径
2008-02-11 21:15
246 查看
题目描述:
无向带权图中,边数不超过100。从一个起点旅行到一个目的地,你所走的路线中费用最大的一条路可以免费,要求这次旅行的最小费用。
分析:
这是个变形的最短路径题目。核心思想还是使用Dijkstra算法。关于如何选择免费的边,我们可以枚举:
设起点和终点分别为sou,des。枚举所有边ei,其端点为xi,yi。
断开边ei,计算ei两个端点分别到起点终点的最短路径之和。这里有两种情况,即xi到sou,yi到des;和xi到des,yi到sou,取两者最小值。这样得到以ei作为免费边的最少费用。
枚举完所有边,取最小值即可。
至于字符串,可以使用Hash函数来编号推荐用ELFHash函数,这个题目我只开了2倍的Hash数组都能AC~
#define M 1002
int ELFHash(char *str)
{
unsigned int hash=0;
unsigned int x=0;
while(*str)
{
hash=(hash<<4)+(*str++);
if((x=hash&0xF0000000L)!=0)
{
hash^=(x>>24);
hash&=~x;
}
}
return hash%(M-1)+1;
}
主要的优化还是在Dijkstra算法上,用链表+堆可以很快也省空间。
排名第5~ 很高兴~ :)
无向带权图中,边数不超过100。从一个起点旅行到一个目的地,你所走的路线中费用最大的一条路可以免费,要求这次旅行的最小费用。
分析:
这是个变形的最短路径题目。核心思想还是使用Dijkstra算法。关于如何选择免费的边,我们可以枚举:
设起点和终点分别为sou,des。枚举所有边ei,其端点为xi,yi。
断开边ei,计算ei两个端点分别到起点终点的最短路径之和。这里有两种情况,即xi到sou,yi到des;和xi到des,yi到sou,取两者最小值。这样得到以ei作为免费边的最少费用。
枚举完所有边,取最小值即可。
至于字符串,可以使用Hash函数来编号推荐用ELFHash函数,这个题目我只开了2倍的Hash数组都能AC~
#define M 1002
int ELFHash(char *str)
{
unsigned int hash=0;
unsigned int x=0;
while(*str)
{
hash=(hash<<4)+(*str++);
if((x=hash&0xF0000000L)!=0)
{
hash^=(x>>24);
hash&=~x;
}
}
return hash%(M-1)+1;
}
主要的优化还是在Dijkstra算法上,用链表+堆可以很快也省空间。
排名第5~ 很高兴~ :)
相关文章推荐
- 九度oj 题目1008:最短路径问题 【ZJU2010考研机试题4】【dij+dfs】
- 最短路径Floyd算法(C语言)
- 最短路径Dijkstra(邻接矩阵)
- 图的点对最短路径算法(C++实现)
- 求最短路径长度-迪杰特斯拉算法
- 城市地图--深度优先遍历最短路径
- 【DP】三角形中的最短路径长度
- 关于用Dijkstra求最短路径的学习小结(附上源码)
- 单源多目标最短路径模型
- 解析Bellman-Ford算法求最短路径
- POJ 3169 Layout ( 最短路径、差分约束)
- poj 3311(状态压缩DP的最短路径)
- arcgis for flex api version3.7 教程:7.使用Directions查询路线(最短路径分析)
- [置顶] 多源最短路径-Floyd-Warshall—C
- 图论-最短路径问题
- 最短路径—Dijkstra算法
- 带权路径最短——Dijkstra算法
- 带权路径最短——Dijkstra算法
- hdu 2544 单源最短路径(邻接矩阵Dijkstra实现)
- 最短路径