图论——最短路径——dij

dij 模板

通过 poj 2387 求去点1 -点 n 的最短路径

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

using namespace std;

const int MAXV = 4010;
const int inf = 10000000;

int map[MAXV][MAXV];//路径长度
int d[MAXV];//距离
bool vis[MAXV];
int n,m;

void dijkstra(int s)
{
	for(int i=1;i<=n;i++)
    {
		vis[i]=0;
		d[i]=map[s][i];
	}

	while (1)
    {
		int min=inf,v = -1;
		for(int i=1;i<=n;i++)
			if(!vis[i] && d[i]<min)
			{
				v=i;
				min=d[i];
			}
        if(v == -1)
            break;
		vis[v]=1;
		for(int i=1;i<=n;i++)
			if(!vis[i] && d[i] > d[v] + map[v][i])
				d[i]=map[v][i]+d[v];
	}
}

int main()
{
	int i,j,a,b,c;
	while(scanf("%d%d",&m,&n) != EOF)
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            {
                if(i==j)
                    map[i][i]=0;
                else
                    map[i][j]=map[j][i]=inf;
            }
            for(i=1;i<=m;i++)
            {
                scanf("%d%d%d",&a,&b,&c);
                if(map[a][b]>c)
                    map[a][b]=map[b][a]=c;
            }
		dijkstra(1);
		printf("%d\n",d[n]);
	}
	return 0;
}
时间: 2024-08-23 00:34:45

图论——最短路径——dij的相关文章

【算法总结】图论-最短路径

[算法总结]图论-最短路径 一.概念 最短路径问题.即寻找图中某两个特定结点间最短的路径长度.所谓图上的路径,即从图中一个起始结点到一个终止结点途中经过的所有结点序列,路径的长度即所经过的边权和. 二.Floyd算法 用邻接矩阵保存原图,那么此时邻接矩阵中 edge[i][j]的值即表示从结点 i 到 结点j,中间不经过任何结点时距离的最小值(若它们之间有多条边,取最小权值保存至邻接矩阵:也可能为无穷,即不可达).假设结点编号为 1 到 N,我们再考虑从结点i 到结点j中间只能经过编号小于等于1

[图论] 最短路径(Bellman-Ford , SPFA , Floyed , Dijkstra)

注:模板以hdu 2544 为例 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据.每组数据第一行是两个整数N.M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路.N=M=

单源最短路径(dij+堆优化)

单源最短路径的模板题,感谢同学余能的帮助~ #include<bits/stdc++.h> #define inf 2147483647 using namespace std; bool book [200004]; int cnt=0; int head[200020]; int n,m,qq; struct Edge { int to,next,w; }e[2000005]; struct Dis { int to,w; }dis[20000]; struct cmp1 { bool o

第16次CCF CSP认证-第5题-317 号子任务(subtask317)-图论最短路径

[题目背景]“你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——<流浪地球>原著我们带着地球去流浪了,为了处理流浪过程中可能会发生的危机,联合政府找到你,希望你能协助完成 317 号子任务:制定应急预案.[题目描述]地球的表面有 n 个据点,这些据点之间存在 m 条双向道路.这些据点中,有的是建立在行星发动机之下,受到行星发动机的保护(行星发动机据点),而其他据点则没有行星发动机的保护(普通据点,比如燃料采集据点/科研据点等).当发生

3月2-第八次机试课记录

图论 坑 dij使用地图是带权图 记得初始化为INF 无边的权值是INF,不是0,并且这个INF别用INT_MAX这个宏,会导致出现一些问题,比如dij更新路径的时候,INT_MAX + 1会变成负值,出错,自己定义一个比较大的数就行了 const int INF = 1e9 + 7; 思路与总结 与图相关的算法 dfs/bfs 最小生成树(prim + krusk) 最短路径(dij + floyd) 并查集 拓扑排序 注意初始化的值,不一定全是-1和0,比如dij的地图无法联通是INF 无向

吉林省2017年冬令营DAY5

DAY5 图论 最短路径,最小生成树,拓扑排序,连通分量,二分图. 总的来说,day5这一天讲的东西听得不怎么明白,准备冬令营过后回去慢慢理解. 首先讲的是邻接矩阵 假如有n个点,则建立一个n*n的二维数组,在i行的j位上做一个标记表示i与j连通. 第二点讲的是链式前向星 当天听的时候,听得很不明白,后来听大佬讲了一下,上网搜索了一些资料,还算是懂了些. 先建立一个_edge结构体,内含{to,next,val},一个Head[]数组,一个计数器tot 1 #define MX 10000 2

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

各大oj题目分类(转)

POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006POJ1008POJ1013POJ1016POJ1017POJ1169POJ1298POJ1326POJ1350POJ1363POJ1676POJ1786POJ1791POJ1835POJ1970POJ2317POJ2325POJ2390POJ1012POJ1082POJ1099POJ1114POJ1642POJ1677POJ1684

各大oj题目分类

PythonTip 在线编程 挑战python 博文 模式 问答 ACM 课堂 下载 吐槽 放松 About 搜索 欢迎您:SSYYGAM | 个人中心| 注销 ACM/ICPC专栏 各大OJ近期比赛列表 各大OJ题目分类 负责任的OJ搜索 POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006POJ1008POJ1013POJ1016POJ1017POJ1169POJ1298POJ13