我第一次做的最短路径!是poj的2387题目;http://acm.pku.edu.cn/JudgeOnline/problem?id=2387
题目是说奶牛要赶回家睡觉,所以要走最短路径,有t条路径,有n个标记.下面的t行分别是标记之间的距离,这里的输入比较诡异,如果你之前输入了2 3 30.在后面再输入2 3 40,则会忽略这次输入,因为40比30大!首先我是想用open,closed表做的,因为A*和D*也是类似的做法.但是做到后面发现好像这么做的时间复杂度比较大.所以还是改了一下.
这里贴上我的代码:
#include <cstdio>
int i,j,p1,p2,d,t,n,T[1001][1001],f;//,num_closed;//closed[1001],
bool closed[1001];
void init()
{
for(int i=1;i<=n;++i)
{
closed[i]=false;
for(int j=1;j<=n;++j)
T[i][j]=2100000000;
}
}
void checkin()
{
scanf("%d %d %d",&p1,&p2,&d);
//cin>>p1>>p2>>d;
if(T[p1][p2]>d)
{
T[p1][p2]=d;
T[p2][p1]=d;
}
}
/*
bool notin_closed(int j)
{
for(int i=0;i!=num_closed;++i)
if(closed[i]==j)
return false;
return true;
}*/
int pick()
{
int min1=2100000000,minp=-1;
for(int i=1;i!=n;++i)
if(!closed[i]&&T[n][i]<min1)
{
min1=T[n][i];
minp=i;
}
return minp;
}
int main()
{
while(scanf("%d %d",&t,&n)!=EOF)
{
init();
for(i=0;i!=t;++i)
checkin();
closed[n]=true;
while(1)
{
if((f=pick())==-1)
break;
closed[f]=true;
for(i=1;i!=n;++i)
if(!closed[i]&&T[n][f]+T[f][i]<T[n][i])
T[n][i]=T[n][f]+T[f][i];
}
printf("%d\n",T[n][1]);
}
return 0;
}
分享到:
相关推荐
在本数据结构实验中,我们将探索“最短路径-Dijkstra-欧洲旅行”的概念。这个实验是基于Dijkstra算法,一种广泛用于寻找图中两点间最短路径的算法。在这个特定的场景下,我们假设有一个覆盖整个欧洲的铁路系统,每个...
Dijkstra算法是一种常用的图搜索算法,用于计算图中的一条最短路径。该算法的主要思想是从图的某个顶点出发,逐步扩展到其他顶点,直到找到目标顶点的最短路径。 在本节中,我们将详细讲述Dijkstra算法的实现过程,...
本问题中提到的“最短路径-欧洲游”是一个具体实例,通过解决这个问题,我们可以学习到如何运用Dijkstra算法来寻找图中的最短路径。 Dijkstra算法是由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出的,主要用于...
**Dijkstra算法详解** ...总结来说,Dijkstra算法是解决图论中最短路径问题的利器,通过贪心策略逐步找到从起点到各个节点的最短路径。理解并熟练掌握Dijkstra算法对于理解和解决实际问题至关重要。
图的最短路径-Dijkstra算法 图的最短路径问题是图论领域中的一个基本问题,旨在寻找从给定源顶点到其它顶点的权最小路径。Dijkstra算法是一种常用的单源最短路径算法,用于解决带权有向图中的最短路径问题。 单源...
贪心算法之应用-单源最短路径-Dijkstra算法学习
"用Dijkstra算法求图中单源最短路径" Dijkstra算法是一种常用的图搜索算法,用于解决单源最短路径问题。单源最短路径问题是指从一个出发顶点到所有可达顶点的最短路径问题。Dijkstra算法的原理是通过将图中的每个...
1. **Dijkstra算法**:Dijkstra算法是最常用的求解单源最短路径的算法,它保证了找到的路径是局部最优的,即每次选择当前未访问节点中距离源节点最近的一个。这种方法适用于边的权重非负的情况。 2. **Bellman-Ford...
总结起来,Dijkstra算法是解决最短路径问题的重要工具,其MATLAB实现使得算法的理解和应用变得更加便捷。通过理解算法原理并掌握MATLAB实现,我们可以更好地利用这一算法解决实际问题,特别是在图论和网络科学领域。
压缩包文件"Java-Dijkstra-master"可能包含了完整的Java代码示例,包含了上述描述的Dijkstra算法的实现。你可以通过解压并查看代码来学习和理解算法的具体实现细节。在阅读源码时,注意分析数据结构的选择、优先队列...
总的来说,通过邻接矩阵和Dijkstra算法,我们可以有效地在图中找到最短路径,这对于网络路由、地理信息系统、交通规划等许多领域都有重要应用。在实际编程中,优化算法性能(例如使用 Fibonacci heap 或者 A* 搜索...
Dijkstra最短路径算法 Dijkstra算法是图论中应用最广的算法之一,广泛应用于解决最短路径问题。在该算法中,我们可以将问题转换为图论问题,然后使用Dijkstra算法来求解。该算法的基本思路是按照源点s到其他各个...
Dijkstra算法的核心思想是贪心策略,即每次扩展当前已知最短路径的顶点,并更新其邻居节点的最短路径。算法以源节点为起始点,维护一个优先队列(通常用最小堆实现),存储待处理的顶点及其当前估计的最短路径长度。...
除了Floyd算法,解决最短路径问题还有其他方法,例如Dijkstra算法,它适用于无负权边的图,或者Bellman-Ford算法,可以处理含有负权边的情况。不同的算法有各自的优缺点和适用场景,选择哪种算法取决于具体问题的...
本项目“c#非递归求解迷宫最短路径-源码”是用C#编程语言实现的一个解决方案,它不依赖递归算法,而是采用其他策略寻找迷宫中的最短路径。以下是对这一主题的详细解释。 1. **迷宫问题概述**:迷宫问题通常被抽象为...
Dijkstra最短路径算法是一种经典的图论算法,用于寻找图中节点间的最短路径。在计算机科学和网络路由中有着广泛的应用。Matlab作为一种强大的数值计算和可视化工具,非常适合用来实现这种算法。在这个项目中,我们有...
最短路径算法Dijkstra是图论中的一个经典算法,由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出。该算法主要用于寻找带权重的有向或无向图中,从一个特定顶点到其他所有顶点的最短路径。Dijkstra算法的核心思想是...
**Dijkstra最短路径算法**是图论中的一个重要算法,由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出,主要用于解决单源最短路径问题。这个算法能够找到图中一个起点到其他所有顶点的最短路径,尤其适用于有向图或无...