dijkstra

pat a1030 Travel Plan 【Dijkstra求最短路径】

旧城冷巷雨未停 提交于 2020-02-07 11:27:39
题目: https://pintia.cn/problem-sets/994805342720868352/problems/994805464397627392 https://www.nowcoder.com/pat/1/submission-detail/64261014 一、问题描述 A traveler's map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to decide the shortest path between his/her starting city and the destination. If such a shortest path is not unique, you are supposed to output the one with the minimum cost, which is guaranteed to be unique. Input Specification: Each input file contains one test case. Each case

AcWing 849. Dijkstra求最短路 I

只谈情不闲聊 提交于 2020-02-06 04:47:32
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。 输入格式 第一行包含整数n和m。 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。 输出格式 输出一个整数,表示1号点到n号点的最短距离。 如果路径不存在,则输出-1。 数据范围 1≤n≤500, 1≤m≤105, 图中涉及边长均不超过10000。 输入样例: 3 3 1 2 2 2 3 1 1 3 4 输出样例: 3 # include <iostream> # include <cstdio> # include <cstring> # include <algorithm> using namespace std ; const int N = 510 ; int n , m ; int g [ N ] [ N ] ; int dist [ N ] ; bool st [ N ] ; int dijkstra ( ) { memset ( dist , 0x3f , sizeof dist ) ; dist [ 1 ] = 0 ; for ( int i = 0 ; i < n ; i ++ ) { int t = - 1 ; for ( int j = 1 ; j <= n ; j ++ )

ROADS//POJ - 1724//dijkstra

非 Y 不嫁゛ 提交于 2020-02-04 15:55:29
ROADS//POJ - 1724//dijkstra 题目 N cities named with numbers 1 … N are connected with one-way roads. Each road has two parameters associated with it : the road length and the toll that needs to be paid for the road (expressed in the number of coins). Bob and Alice used to live in the city 1. After noticing that Alice was cheating in the card game they liked to play, Bob broke up with her and decided to move away - to the city N. He wants to get there as quickly as possible, but he is short on cash. We want to help Bob to find the shortest path from the city 1 to the city N that he can afford

PTA旅游规划 (Dijkstra)

做~自己de王妃 提交于 2020-02-04 00:55:45
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。 输入格式: 输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中间用空格分开,数字均为整数且不超过500。输入保证解的存在。 输出格式: 在一行里输出路径的长度和收费总额,数字间以空格分隔,输出结尾不能有多余空格。 输入样例: 4 5 0 3 0 1 1 20 1 3 2 30 0 3 4 10 0 2 2 20 2 3 1 20 输出样例: 3 40 第一次写最短路的题目,这是个单源最短路径,使用dijkstra算法。 参考: PTA 7-10 旅游规划(25 分) ACM-图论-dijkstra 旅游规划(25 分) PTA PTA 07-图6 旅游规划 (25 分) # include <iostream> # include <cstring> # include <vector> # include <algorithm> #

Dijkstra实现

江枫思渺然 提交于 2020-02-03 12:27:06
参考视频 存放边的距离信息,使用优先队列PriorityQueue; 存放最短距离的点,使用ArrayList; import java.io.*; import java.util.*; import java.lang.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.PriorityQueue; import java.util.Queue; import java.util.stream.Collectors; class Edge{ public Node from; public Node to; public int weight; public Edge(Node from,Node to,int weight) { this.from=from; this.to=to; this.weight=weight; } } class Node { public String value; public Node(String value) { this.value=value; } public boolean isVisited=false; } class EdgeDist{ public Edge edge;

Dijkstra 畅通工程续

笑着哭i 提交于 2020-02-03 01:56:02
题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。 Input 本题目包含多组数据,请处理到文件结束。 每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。 接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。 再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。 Output 对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1. Sample Input 3 3 0 1 1 0 2 3 1 2 1 0 2 3 1 0 1 1 1 2 Sample Output 2 -1 Dijkstra基础题,注意有重边即可 代码: #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int inf=0x3f3f3f3f; int

Python Search Algorithm from Implied Graphs

混江龙づ霸主 提交于 2020-02-02 13:35:06
问题 A little while ago I asked a question (depth first search algorithm in python), which was answered brilliantly by @6502. It's allowed me to think about this problem more precisely and leads to this follow up question. In the previous question you have an implied directed tree from a function like this: def neighbors1(node): "Returns neighboring nodes in directed tree" #some code yield node_1 #some more code yield node_2 #... yield node_n and a success criteria function like this: def goal

AcWing 849. Dijkstra求最短路I

这一生的挚爱 提交于 2020-01-31 22:39:49
#include<algorithm> #include<iostream> #include<cstring> using namespace std; const int N=510,INF=0x3f3f3f3f; int n,m; int g[N][N],dist[N];//dist[i]:点1到i的距离 bool st[N];//点是否加入了集合 int dijkstra() { memset(dist,0x3f,sizeof(dist));//将所有点设为不可达 dist[1]=0; for(int i=0;i<n;i++)//n次操作 { int t=-1; for(int j=1;j<=n;j++) { if(!st[j]&&(t==-1||dist[t]>dist[j]))//点未在集合中且距离集合 //最近 { t=j; } } st[t]=true;//t点加入集合中 for(int j=1;j<=n;j++) { dist[j]=min(dist[j],dist[t]+g[t][j]);//更新距离 } } if(dist[n]>=0x3f3f3f3f) return -1; return dist[n]; } int main() { cin>>n>>m; memset(g,0x3f,sizeof g); while(m--) { int a,b,c;

数学建模模型4——Dijkstra和Floyd算法

旧街凉风 提交于 2020-01-31 05:36:11
Dijkstra和Floyd算法 二者均为计算最短路径算法 Dijkstra为 贪心算法 ,不能够计算含有负权的图,每次选取路径值最小的顶点最为k Floyd为 动态规划 ,对k从1开始进行遍历 Dijkstra代码 function [ min , path ] = dijkstra ( w , start , terminal ) n = size ( w , 1 ) ; label ( start ) = 0 ; f ( start ) = start ; for i = 1 : n if i ~ = start label ( i ) = inf ; end end s ( 1 ) = start ; u = start ; while length ( s ) < n for i = 1 : n ins = 0 ; for j = 1 : length ( s ) if i == s ( j ) ins = 1 ; end end if ins == 0 v = i ; if label ( v ) > ( label ( u ) + w ( u , v ) ) label ( v ) = ( label ( u ) + w ( u , v ) ) ; f ( v ) = u ; end end end v1 = 0 ; k = inf ; for i = 1 : n

Dijkstra

允我心安 提交于 2020-01-28 00:30:26
Dijkstra求最短路 今天花了一天的时间开始学习图论的第一个算法dij,根据大佬们说的,没有负边权用dijkstra,有负边权用SPFA(死了?)or bellman-ford? 用的链式前向星建图 用优先队列(堆)优化之后复杂度大概是O(m*logn) 模板题 洛谷P4779 题目描述 给定一个 nn 个点,mm 条有向边的带非负权图,请你计算从 ss 出发,到每个点的距离。 数据保证你能从 ss 出发到任意点。 输入格式 第一行为三个正整数 n, m, sn,m,s。 第二行起 mm 行,每行三个非负整数 u, v, w 输出格式 输出一行 nn 个空格分隔的非负整数,表示 ss 到每个点的距离。 输入输出样例 输入 #1 4 6 1 1 2 2 2 3 2 2 4 1 1 3 5 3 4 3 1 4 4 输出 #1 0 2 4 3 # include <bits/stdc++.h> using namespace std ; # define maxn 20000010 # define maxm 20000010 # define INF 99999999999999999 # define int long long inline int read ( ) { int x = 0 , k = 1 ; char c = getchar ( ) ; while ( c <