Til the Cows Come Home (USACO 2004 November)(Dijkstra算法)

简介: Til the Cows Come Home (USACO 2004 November)(Dijkstra算法)

   Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for the morning milking. Bessie needs her beauty sleep, so she wants to get back as quickly as possible.


Farmer John's field has N (2 <= N <= 1000) landmarks in it, uniquely numbered 1..N. Landmark 1 is the barn; the apple tree grove in which Bessie stands all day is landmark N. Cows travel in the field using T (1 <= T <= 2000) bidirectional cow-trails of various lengths between the landmarks. Bessie is not confident of her navigation ability, so she always stays on a trail from its start to its end once she starts it.


Given the trails between the landmarks, determine the minimum distance Bessie must walk to get back to the barn. It is guaranteed that some such route exists.

Input

* Line 1: Two integers: T and N


* Lines 2..T+1: Each line describes a trail as three space-separated integers. The first two integers are the landmarks between which the trail travels. The third integer is the length of the trail, range 1..100.

Output

* Line 1: A single integer, the minimum distance that Bessie must travel to get from landmark N to landmark 1.

Sample Input

5 5

1 2 20

2 3 30

3 4 20

4 5 20

1 5 100

Sample Output

90

Hint

INPUT DETAILS:


There are five landmarks.


OUTPUT DETAILS:


Bessie can get home by following trails 4, 3, 2, and 1.


不错的一个模板题;


直接分析题目,说一下思路,就是第一主函数里面我们要先将距离进行初始化,然后在把每个边对应的距离赋值,后面就是一个定义由起点到目标点的小函数,然后就直接Dijkstra()在函数里面我们要用到一个标记,这个很重要可以防止前面的循环对后面影响,然后·第一步就是找一个连接起点最短的点然后标记让后面的计算中不能影响,否则会出现不必要的值,或者错乱,然后下一个代码就是找k下一个节点就是离k最短的那个点,然后就建立了一个完整的生态圈,最后打出dis[m];


下面是ac代码,关建点都有注释。

f58230e9f063709cf3167704f4efdf14.gif


有事你就q我;QQ2917366383


学习算法


额考虑到c语言好久没有写了就练习了一下,想看c++的可以找我。

#include<stdio.h>
#define maxn 0x3fffffff
int dis[1005],map[1005][1005];
void dk(int m)
{
  int p[1005]={0};//先全部初始化为0 
  p[1]=1;//自己到自己就是不行,标记他 
  int i,j,k,min; 
  for(int i=1;i<=m;i++)
  {
    min=maxn;//方便看 
    k=1;//怕出现特例 
    for(int j=1;j<=m;j++)
    if(!p[j]&min>dis[j])//标记大法,防止前面的循环影响后面的; 
    {
      min=dis[j];
      k=j;
    }//找到一个1连接的最短值 
    p[k]=1;//标记他,自己不能自己到自己 
    for(int j=1;j<=m;j++)
    {
      if(!p[j]&dis[j]>dis[k]+map[k][j])//相当于由前面的k接下一个节点 
      {
        dis[j]=dis[k]+map[k][j];//进行比较得到k下一个 节点的最短距离 
      }
    }
  }
  printf("%d",dis[m]);//听懂掌声 
 } 
int main() 
{
  int n,m,a,b,i,j,line;//定义部分 
  while(scanf("%d%d",&n,&m)!=EOF)//可以多次输入 测试数据 
  {
    for(int i=1;i<=m;i++)
    {
      map[i][i]=0;
      for(int j=1;j<i;j++)//细节哦,j<i,才能遍历哦(不遍历i=j) 
      map[i][j]=map[j][i]=maxn;//相当于把初始化最大,后面有用 
    }
    for(int i=1;i<=n;i++)//几个边 
    {
      scanf("%d%d%d",&a,&b,&line);//点和距离 
      if(line<map[a][b])//用了前面提到的maxn来变相赋值 
      map[a][b]=map[b][a]=line;//没有方向所以都要赋值 
    }
    for(int i=1;i<=m;i++)//接下来就是由1为出发点到点i都距离 
    dis[i]=map[1][i];
    dk(m);//下面就是考验思维了 
  }
}
相关文章
|
人工智能 算法 数据可视化
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-2
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-2
|
4月前
|
存储 运维 监控
基于 C# 语言的 Dijkstra 算法在局域网内监控软件件中的优化与实现研究
本文针对局域网监控系统中传统Dijkstra算法的性能瓶颈,提出了一种基于优先队列和邻接表优化的改进方案。通过重构数据结构与计算流程,将时间复杂度从O(V²)降至O((V+E)logV),显著提升大规模网络环境下的计算效率与资源利用率。实验表明,优化后算法在包含1000节点、5000链路的网络中,计算时间缩短37.2%,内存占用减少21.5%。该算法适用于网络拓扑发现、异常流量检测、故障定位及负载均衡优化等场景,为智能化局域网监控提供了有效支持。
101 5
|
1月前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
167 4
|
2月前
|
算法 机器人 定位技术
基于机器视觉和Dijkstra算法的平面建筑群地图路线规划matlab仿真
本程序基于机器视觉与Dijkstra算法,实现平面建筑群地图的路径规划。通过MATLAB 2022A读取地图图像,识别障碍物并进行路径搜索,支持鼠标选择起点与终点,最终显示最优路径及长度,适用于智能导航与机器人路径规划场景。
|
12月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
665 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
8月前
|
算法 编译器 C++
【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
|
存储 算法 程序员
迪杰斯特拉(Dijkstra)算法(C/C++)
迪杰斯特拉(Dijkstra)算法(C/C++)
|
机器学习/深度学习 算法 Java
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
这篇文章介绍了基于贪婪技术思想的Prim算法和Dijkstra算法,包括它们的伪代码描述、Java源代码实现、时间效率分析,并展示了算法的测试用例结果,使读者对贪婪技术及其应用有了更深入的理解。
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
基于Dijkstra算法的最优行驶路线搜索matlab仿真,以实际城市复杂路线为例进行测试
使用MATLAB2022a实现的Dijkstra算法在城市地图上搜索最优行驶路线的仿真。用户通过鼠标点击设定起点和终点,算法规划路径并显示长度。测试显示,尽管在某些复杂情况下计算路径可能与实际有偏差,但多数场景下Dijkstra算法能找到接近最短路径。核心代码包括图的显示、用户交互及Dijkstra算法实现。算法基于图论,不断更新未访问节点的最短路径。测试结果证明其在简单路线及多数复杂城市路况下表现良好,但在交通拥堵等特殊情况下需结合其他数据提升准确性。
|
资源调度 算法 定位技术

热门文章

最新文章

下一篇
oss教程