杭电1874————单源最短路径(dijkstra)
畅通工程续
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 28395 Accepted Submission(s): 10289
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
每组数据第一行包含两个正整数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),分别代表起点和终点。
<span style="font-family:Microsoft YaHei;font-size:14px;">#include <stdio.h>
#include <string.h>
#define cost_max 100000
#define min(A,B) ( (A) < (B) ? A : B)
#define maxn 105
int sum,intree[maxn];
int G[maxn][maxn];void initialize_tree(int N)
{for(int i = 0 ; i < N ; i++)for(int j = 0 ; j < N ; j++)G[i][j] = cost_max;memset(intree,0,sizeof(intree));
}
int dijkstra(int s,int e,int N)
{int mindist[N];/*mindist[i]表示从初始节点到i结点的最小距离*/ int tempdist,node;for(int i = 0 ; i < N ; i++)mindist[i] = G[s][i];intree[s] = 1;/*把初始结点s加入A集合*/for(int i = 0 ; i < N - 1 ; i++)/*从剩下的结点中依次选取*/ {tempdist = cost_max;for(int j = 0 ; j < N ; j++){if(mindist[j] < tempdist && !intree[j]){tempdist = mindist[j];node = j;}}/*选择最小代价边*/intree[node] = 1;for(int j = 0 ; j < N ; j++)if(!intree[j])mindist[j] = min(mindist[j],mindist[node] + G[node][j]);} return mindist[e];
}
int main()
{int N,M;int vertex1,vertex2,weight,s,e;/*start and end*/while(scanf("%d%d",&N,&M) != EOF){initialize_tree(N);for(int i = 0 ; i < M ; i++){scanf("%d%d%d",&vertex1,&vertex2,&weight);if(G[vertex1][vertex2] > weight && G[vertex2][vertex1] > weight)G[vertex1][vertex2] = G[vertex2][vertex1] = weight;}scanf("%d%d",&s,&e);if(s == e)printf("%d\n",0);else{int ans = dijkstra(s,e,N);if(ans == cost_max)printf("-1\n");elseprintf("%d\n",ans);} }return 0;
}</span>
转载于:https://www.cnblogs.com/sixdaycoder/p/4348381.html
杭电1874————单源最短路径(dijkstra)相关推荐
- 分支限界法:单源最短路径--dijkstra算法
单源最短路径–dijkstra算法 前面已经多次介绍过dijkstra算法是贪心算法,是动态规划,实际上可以从分支限界的角度来理解: 分支限界法 分支限界法,实际上就是回溯法,一般意义的回溯法是基于深 ...
- 数据结构----单源最短路径Dijkstra
数据结构----单源最短路径Dijkstra 原理:参考趣学数据结构 代码: stack.h 栈代码 #pragma once #include<stdio.h> #define maxS ...
- 单源最短路径-Dijkstra(迪杰斯特拉算法)
迪杰斯特拉算法时间复杂度为O(n^2),其中n为顶点个数. 该算法用于求单源最短路径.并且图中的边不允许带负权值. #include <iostream> using namespace ...
- 数据结构与算法—单源最短路径dijkstra算法
介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或 ...
- 单源最短路径dijkstra算法
介绍 dijkstra算法也是解决单源最短路径问题的一种方法.它要求图中路径都是非负的.而且,它的效率要高于bellman算法. 实现 首先定义图的结点信息和边信息. struct _Node;typ ...
- NYOJ有趣的问题(单源最短路径dijkstra)
思路:这题的难度主要是在建图上,建完图之后就是求单源最短路径问题.可用dijkstra算法.要注意他给出的墙的x坐标不是有序 的. #include<stdio.h> #include&l ...
- 单源顶点最短路径java_单源最短路径-Dijkstra 算法
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问题:求a点到各个点的最短距离,如下图 ...
- JAVA编程求单源最短路径_【算法】单源最短路径——dijkstra算法
一,概念 单源最短路径 给定一个带权有向图G=(V,E),其中每条边的权是一个实数.另外,还给定V中的一个顶点,称为源.要计算从源到其他所有各顶点的最短路径长度.这里的长度就是指路上各边权之和.这个问 ...
- 单源最短路径 dijkstra
dijkstra是单源最短路径算法,要两个数组来维护需要的信息 dis[i]用来维护起始点到i点的最短距离,初始化为一个很大的数字 0x3f3f3f3f vis[i]用来维护是否访问过该点,初始化为0 ...
最新文章
- 算法--------------整数反转
- Win8Beta即将发布,业内普遍看好微软Windows 8
- MySQL—01—MySQL介绍和安装
- linux nginx svn 安装
- 函数默认形参与占位参数
- [react] 说说你对“在react中,一切都是组件”的理解
- excel字符串反转
- JSON中的JSON.parseArray()方法、JSON.parseObject()方法和JSON.tojsonString()方法
- Oracle Database Gateway 安装
- 步步为营 .NET 设计模式学习笔记 九、Command(命令模式)
- 鸿蒙冰心有其他途径得到吗,关索除了人遁礼包,还有其他途径能获得吗?
- Java常用知识整理
- Poj 1328 Radar Installation 贪心
- 【GAMES101】作业2--三角形光栅化
- RuoYi-Vue简介
- 商人渡河问题(MATLAB版)
- 计算机专业基础英语,计算机专业基础英语1.ppt
- 那些年这么火的MyCat你还不知道吗?
- python3爬虫(4)各种网站视频下载方法
- (转)Linux下管道的原理
热门文章
- LayUI数据表格复选框显示不居中问题
- MySQL基础命令中文解析
- java 文件追加 变大_用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊?...
- oracle 权限控制表,Oracle 用户权限管理与常用权限数据字典列表
- A除B求商(PAT20)高精度/低精度
- Frequent values
- 找出不是两个数组共有的元素_06.数组(练习篇)
- nginx服务器部署dist文件夹
- 最小生成树的java实现
- UnityShader18:立方体贴图(上)