dijkstra最短路算法模板(双源)

原创 2018年04月16日 21:31:32
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int vis[1005],dis[1005],cost[1005][1005];//vis为标记跳板点,dis为每个点与起点的距离,cost为记录点与点的权值,
long long n,m,k;
long long t1,t2;//定义起始点和终点为全局变量。
void dij(int s,int e)
{
	for(int i=1;i<=n;i++)
	{
		cost[i][i]=0;
		dis[i]=cost[s][i];//t1表示起始点,t2表示终点,
	}
	memset(vis,0,sizeof(vis));//初始化每个点为0,如果充当跳板则赋值为1
	vis[s]=1;//标记已充当过跳板的点,刚开始时,第一个起点为跳板点
	for(int i=1;i<n;i++)
	{
		int k=1e9-1;//设置k为很大很大的一个数字
		for(int j=1;j<=n;j++)
		{
			if(!vis[j] && dis[j]<k)//找出距离跳板最近的点并且这个点没有充当过跳板
			{
				k=dis[j]; //更新k的值,找出距离当前跳板最近的点
				s=j;//记录当前跳板
			}
		}
		vis[s]=1;//标记当前跳板,下次寻找过程中,不在使用这个跳板
		for(int i=1;i<=n;i++ )
		{
			if(cost[s][i]<0x3f3f3f3f)
			dis[i]=min(dis[i],dis[s]+cost[s][i]);//当前跳板为s点,判断原来每个点与起点的距离最近,
			                                     //还是起点通过跳板与每个点的距离哪儿个更近,这个过程称为松弛
		}
		if(s==e) return ;
	}
}
int main()
{
	cin>>m>>n;
	int a,b,c,k,t,sum=0.0;
	memset(cost,0x3f,sizeof(cost));
	for(int i=1;i<=m;i++)
	{
		cin>>a>>b>>c;
		cost[a][b]=min(cost[a][b],c);//无方图,a点到b点的距离,为c;
		cost[b][a]=min(cost[b][a],c);//无方图,b点到a点的距离,为c;
	}
	cin>>a>>b;
	if(a>b) swap(a,b);//起点为a,终点为b,a到b和b到a的权值是一样的!
	dij(a,b);
	cout<<dis[b]<<endl;
}

HDU 2680 Choose the best route【多源最短路,Dijkstra+spfa】

题意:输入n,m,s,分别代表车站数(顶点数),路的数量,终点位置,然后有m行数据代表车站之间的距离,再输入一个w,代表可以开始的地方,接下来就是w个点。 思路:还是最短路,但是起点有多个选择,如果...
  • hurmishine
  • hurmishine
  • 2016-07-26 15:20:26
  • 952

HDU 3790 最短路径问题【多关键字最短路,Dijkstra算法+spfa算法】

最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S...
  • hurmishine
  • hurmishine
  • 2016-07-26 15:33:24
  • 791

Dijkstra算法 求源点到各点之间的最短路

初学者 按照自己的理解写的 #include #include #define MAX 1000 void Dijkstra(int arc[][5],int arcnum,int verte...
  • tspxxx
  • tspxxx
  • 2017-03-12 17:32:20
  • 370

wikioi p1077 多源最短路

题目简单 邻接矩阵+dijkstra #include #include #include #include #include using namespace std; const int MAX_N...
  • u011797284
  • u011797284
  • 2013-09-01 10:31:16
  • 572

【模板】Floyd双源最短路径

题目描述 用费洛伊德(Floyed)算法求任意两点最短路径。 输入格式: 第一行三个整数n,m,q; 以下m行每行三个整数a,b,c,表示a,b之间有双向边,且边的权值...
  • zj_yuneng
  • zj_yuneng
  • 2017-05-27 10:10:41
  • 367

Dijkstra算法【模板】

1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法...
  • Scythe666
  • Scythe666
  • 2016-03-20 19:32:25
  • 1202

十二、图的算法入门--(4)最短路问题---Dijkstra算法实现

摘自计蒜客:http://www.jisuanke.com/course/35/7557 先来看这样一个问题:有n座城市,已知任意两个座城市之间的距离,现在要分别求出城市A到其他n-1座城市的最短路径...
  • firetreeSF
  • firetreeSF
  • 2016-05-09 16:25:38
  • 2705

最短路算法集合

一、Dijkstra算法:仅限用于无边权为负数的图,更不能正确处理负环的情况。把所有点分成两个集合,S集合是存已经确定下来、不会再更改(准确一点的话是“不能再更改”)的点,T集合是待确定的点集。从T集...
  • A_Bright_CH
  • A_Bright_CH
  • 2018-02-13 11:36:09
  • 31

最短路径问题 HDU 3790 双权最短路

最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...
  • wr132
  • wr132
  • 2016-03-28 19:56:06
  • 512

图论最短路之Dijkstra算法,SPFA算法

一.最短路径的最优子结构性质(转载 原文链接http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html)   该性质描述为:...
  • mr_zj_
  • mr_zj_
  • 2016-07-13 14:26:16
  • 1359
收藏助手
不良信息举报
您举报文章:dijkstra最短路算法模板(双源)
举报原因:
原因补充:

(最多只允许输入30个字)