最短路
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 25976 Accepted Submission(s): 11195
Problem Description
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
Input
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。
输入保证至少存在1条商店到赛场的路线。
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
Sample Input
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
Sample Output
3
2
思路:
最短路。Dijkstra。初始化距离全部为无穷大。邻接矩阵。
AC:
#include <stdio.h> #include <string.h> #define INF 9999999 int Map[105][105],vis[105]; int dis[105],n; void dijkstra(){ for(int i = 1;i <= n;i++){ int x,m = INF; for(int j = 1;j <= n;j++){ if(!vis[j] && m >= dis[j]){ m = dis[j]; x = j; } } vis[x] = 1; for(int j = 1;j <= n;j++){ if(dis[j] > dis[x] + Map[x][j]) dis[j] = dis[x] + Map[x][j]; } } } int main(){ int m; while(~scanf("%d%d",&n,&m) && (n + m)){ for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) Map[i][j] = INF; memset(vis,0,sizeof(vis)); for(int i = 1;i <= n;i++) dis[i] = (i == 1 ? 0 : INF); while(m--){ int a,b,c; scanf("%d%d%d",&a,&b,&c); Map[b][a] = c; Map[a][b] = c; } dijkstra(); printf("%d\n",dis[n]); } return 0; }
相关推荐
在MATLAB环境中实现Dijkstra算法,可以使用邻接矩阵或邻接表来表示图。邻接矩阵是一个二维数组,其中的元素表示节点之间的边和权重;邻接表则是每个节点对应一个链表,链表包含与其相邻的节点及其边的权重。Dijkstra...
文件“基于最短路dijkstra算法离散优化问题代码”应该包含了具体的MATLAB源码,可能包括了构建图的矩阵表示,优先队列的数据结构实现,以及Dijkstra算法的完整流程。通过阅读和理解这段代码,你可以学习到如何在...
矩阵运算在数据结构中可能用于表示图的邻接矩阵。在这个问题中,`edge[][]`矩阵被用来存储城市之间的距离,也就是图的权重。矩阵加减乘除可以用于处理图的变换或者求解某些特定问题,但在这个特定的课程设计中,矩阵...
Dijkstra算法是解决最短路问题的经典算法,旨在寻找图形中从起点到终点的最短路径。该算法广泛应用于计算机科学、交通网络、通信网络等领域。本文将对Dijkstra算法的Matlab实现进行详细的解释和分析。 算法原理 ...
总的来说,Dijkstra最短路径算法在C#中的实现涉及了数据结构(如优先队列)、图的表示(邻接矩阵或邻接表)以及贪心策略的应用。理解并熟练掌握这个算法对于解决实际问题,特别是在图论和网络领域,具有重要的意义。
首先,通过一个二维数组`a`来表示图的邻接矩阵。其中,`M = 10000`代表两点间没有直接连接(即无穷大)。例如,`a(1,:) = [0, 50, M, 40, 25, 10]`表示从顶点1到顶点2的距离为50,到顶点3的距离为无穷大(即没有...
dijkstra算法的R语言实现。输入为邻接矩阵和权重矩阵。如果没有权重,则认为权重矩阵为邻接矩阵。输出为从源节点到网络其他节点的最短距离和最短路径。如果有多条最短路,可以选择同时输出多条路。
这部分代码主要完成了算法的初始化操作,包括邻接矩阵的定义、距离数组的初始化以及最短路径树的初始化等。 ##### 3. 算法流程 ```matlab while length(find(dd==1)) for i=1:m if dd(i)==0 d(i)=min(d(i),d(y)...
本资源“基于最短路Dijkstra算法离散优化问题代码.zip”提供了一种用MATLAB实现的解决方案,特别针对数模美赛中的B题常见题型。Dijkstra算法是解决单源最短路径问题的经典算法,对于网络流、图论以及各种优化问题有...
在给定的压缩包中,"基于最短路dijkstra算法离散优化问题matlab代码"包含了实现Dijkstra算法的MATLAB代码。这个代码首先定义了图结构,然后使用优先队列(可以利用MATLAB的`sort`和`find`函数模拟)来实现节点的选取...
"美赛各题型常见参考代码:基于最短路dijkstra算法离散优化问题代码.zip" 这个标题表明了文件内容主要针对美国数学建模竞赛(Mathematical Contest in Modeling,简称美赛)中的编程题目,提供了使用Dijkstra算法...
具体到提供的代码,可以看到`prime`函数实现了普里姆算法,使用一个邻接矩阵`edge`存储城市间的距离,通过不断更新最近邻接节点和最小生成树的总成本来找到最小生成树。`kruskal`函数实现了克鲁斯卡尔算法,利用并查...
Dijkstra算法python实现,基于邻接矩阵及优先队列 不仅能够求解其实节点到各个节点的最短路径长度,而且并确定各条最短路径上的节点信息
Dijkstra最短路算法是一种经典的图论算法,用于在加权有向图或无向图中寻找从指定起点到其余所有节点的最短路径。该算法由荷兰计算机科学家艾兹格·迪科斯彻(Edsger W. Dijkstra)于1956年提出,以他的名字命名。其...
综上所述,"C++用Dijkstra求解最短路"这个主题涉及到的主要知识点包括:Dijkstra算法的基本思想、C++中的数据结构(如二维数组和优先队列)、图的表示方法(邻接矩阵)、贪心策略以及如何在C++环境中实现这些概念。...
此行为函数定义行,指明了这是一个名为`dijkstra`的函数,接受两个参数:`D`表示图的邻接矩阵,`s`表示起始顶点。函数返回两个结果:`d`是包含从起始顶点到各顶点最短距离的向量;`DD`是一个矩阵,记录了最短路径上...
- **更新邻居节点的距离**:对于当前节点的每一个邻接节点,如果通过当前节点到达它的总距离更短,则更新该节点的距离值。 - **标记当前节点为已访问**:防止重复计算。 - **重复以上步骤**:直到找到目标节点或所有...
### 文档最短路问题Dijkstra算法 #### Dijkstra算法简介 Dijkstra算法是由荷兰计算机科学家Edsger W. Dijkstra于1956年提出的一种用于解决带权重图中的单源最短路径问题的经典算法。它能有效地找出从一个起点到图...
基于matlab的dijkstra最短路由算法,可以分别通过邻接矩阵和坐标信息来计算。文件中JULI是通过各个点坐标及点之间连接情况进行判断,而JULI2则是根据邻接矩阵的信息来计算dijkstra最短路径。运行mian文件可以得到...