Dijstra算法-------为了纪念,等以后看的时候方便
杭电problem2066
Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 27 Accepted Submission(s) : 6
Font: Times New Roman | Verdana | Georgia
Problem Description
Input
Output
Sample Input
6 2 3
1 3 5
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2
8 9 10
Sample Output
9 1 #include<iostream>
#include<cstring>
//#include<fstream>
using namespace std;
int T,S,D;
int arr[][];
bool judge[];
int d[]; void Dijkstra(int star,int endf)//此处就是我上篇写的模板,只是改动了参数变量以及那因题而异的“最小值”
{
for(int f=;f<=endf;f++)
d[f]=arr[star][f];
memset(judge,false,sizeof(judge));
judge[star]=true;
d[star]=;
for(int i=;i<=endf;i++)
{
int min=,g=;
for(int k=;k<=endf;k++)
if(!judge[k]&&d[k]<min)
{
min=d[k];
g=k;
}
judge[g]=true;
for(int j=;j<=endf;j++)
if((d[g]+arr[g][j]<d[j]))
d[j]=d[g]+arr[g][j]; }
}
int main()
{ // freopen("in.txt","r",stdin);
int a,b,time,c;
while(cin>>T>>S>>D)
{ int ma=;
memset(arr,,sizeof(arr));
for(c=;c<T;c++)
{
cin>>a>>b>>time;
if(time<arr[a][b])
arr[a][b]=arr[b][a]=time;
if(a>ma) ma=a;//很牛的是这里,当然了也是看到大牛的杰作,这次会了,下次也就成大牛了
if(b>ma) ma=b;//ma就是用来求出顶点编号最大的
}
ma++;//最大的加一以后是什么结果呢
//就是相当于把草儿想去的地方归结到一个顶点,这样做的话,对于应用Dijstra是有很大的益处的
for(c=;c<S;c++) {cin>>a;arr[][a]=;}
for(c=;c<D;c++) {cin>>a;arr[a][ma]=;}//那就是这句了
Dijkstra(,ma);
cout<<d[ma]<<endl;
}
return ;
} 思路很清晰吧!
再啰嗦一下思路:
1:首先按题目条件读入数据,并作适当处理,个人认为Dijstra算法如何应用取决与开始对数据的处理以及它内部的一些微小改变
(就如此题在开始的时候对数据进行预处理就大大简化了后面的操作)
2:直接用Dijstra算法模板,只不过那个参数要稍微改变一下
3:最大值一定要选取恰当,小的话就会wronganswer,大的话就有可能超时 好了就这么多了,保证我过一个月后能看懂就可以啦
Dijstra算法-------为了纪念,等以后看的时候方便的更多相关文章
- dijstra算法,求源点到各个顶点的最短距离
1:dijstra算法常用语求最短距离, dijstra每次从未发现节点n[]中,发现距离源点最短的节点m,求出最短节点后,将m添加到已发现节点y[]中,用该节点m进行更新其它未发现节点n[]-m的最 ...
- 单源最短路Dijstra算法
Dijstra算法是寻找从某一顶点i出发到大其他顶点的最短路径.Distra算法的思想与Prim算法很像,它收录顶点的规则是按照路径长度递增的顺序收录的.设v0是源顶点,我们要寻找从v0出发到其他任意 ...
- KMP算法最浅显理解——一看就明确
说明 KMP算法看懂了认为特别简单,思路非常easy,看不懂之前.查各种资料,看的稀里糊涂.即使网上最简单的解释,依旧看的稀里糊涂. 我花了半天时间,争取用最短的篇幅大致搞明确这玩意究竟是啥. 这里不 ...
- JS中几种常见的数组算法(前端面试必看)
JS中几种常见的数组算法 1.将稀疏数组变成不稀疏数组 /** * 稀疏数组 变为 不稀疏数组 * @params array arr 稀疏数组 * @return array 不稀疏的数组 */ f ...
- 最短路,dijstra算法
#include<iostream> #include<stdio.h> #include<math.h> #include<vector> using ...
- Dijstra算法求最短路径
参考博客:http://blog.51cto.com/ahalei/1387799 与Floyd-Warshall算法一样这里仍然使用二维数组e来存储顶点之间边的关系,初始值如下. ...
- 硬盘上的一些算法小题目||and今天看了下林锐的书以及gdb调试 及一些变成算法小题目
gdb调试:观察点,断点,事件捕捉点.step 进入函数,next 跳过函数,until 跳出循环,finish 结束函数 林锐:书后试题 & c++的对象模型图 看了二叉树的非递归遍历, 链 ...
- 最短路和次短路的条数(dijstra算法或spfa算法)POJ3463
http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- sqrt开平方算法的尝试,是的看了卡马克大叔的代码,我来试试用C#写个0x5f3759df和0x5f375a86跟System.Math.Sqrt到底哪个更强
今天笔试遇到一个代码题,要求写一个开平方算法,回来发现了雷神之锤里的一段神代码: float Q_rsqrt( float number ) { long i; float x2, y; const ...
随机推荐
- git diff的使用
有时候可能睡觉时候忘记关电脑了,然后不小心触碰到键盘上某个神秘的按钮了,然后自己也不知道就提交了 就可能很悲剧 那么有时候不知道自己是否改变了哪些文件的内容 这时候就需要用到git diff git ...
- java代码对按钮进行监听---------------打印出每次点击按钮的次数
其实,我真不会写嗯? package com.a.b; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...
- 启用不安全的HTTP方法解决方案
启用不安全的HTTP方法解决方案 Web AppScan HTTP WebDAV 近期通过APPScan扫描程序,发现了不少安全问题,通过大量查阅和尝试最终还是解决掉了,于是整理了一下方便查阅. 1. ...
- mysql数据增删查授权
一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...
- PHP字符串的处理(二)-字符串的格式化
1.字符串大小写的转换 strtoupper():将字符串全部转换为大写字母 strtolower():将字符串全部转换为小写字母 ucfirst():将字符串中的首字母转换为大写,其余字符不变 uc ...
- ll | wc -l的陷阱
在平时我们可能经常使用ls和wc命令来统计某个文件夹下指定类型文件的个数.今天在使用的时候发现ls和ll出来的结果不一样. dwapp@pttest1:/home/dwapp/joe.wangh/te ...
- generate_scripts
echo "#!/usr/bin/env python" >$1echo "#-*- encoding=UTF-8 -*-" >>$1echo ...
- 第十一章 SpringMvc(待续)
············
- sql代码段添加数据
declare @i int,@index int set @i=1 set @index=0 while @i<1000000 begin set @inde ...
- c++builder Active Form
新增的属性.方法刷新一下才可以生成方法的实现.保存按钮不生成,刷新就好了. Refresh Implemention