【迪杰斯特拉双关键字最短路】【HDU3790】【最短路径问题】
题目大意:
只需要再更新的时候判断一下就好
void dijstra(int s)
{
dist[s]=0;
for(int i=1;i<=n;i++)
{
s=findmin();
visit[s]=1;
for(int j=1;j<=n;j++)
{
if(dist[j]>dist[s]+MAP[s][j])
{
dist[j]=dist[s]+MAP[s][j];
val[j]=val[s]+w[s][j];
}
else if(dist[j]==dist[s]+MAP[s][j]&&val[j]>val[s]+w[s][j])
val[j]=val[s]+w[s][j];
}
}
}
完整代码如下:
/*
1.有重边
2.忘记是无向图了
*/
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=1000+5;
int n,m;
int MAP[maxn][maxn];
int w[maxn][maxn];
int dist[maxn];
int visit[maxn];
int val[maxn];
int ss,tt;
void input()
{
int a,b,d,q;
memset(MAP,0x3f,sizeof(MAP));
memset(dist,0x3f,sizeof(dist));
memset(w,0,sizeof(w));
memset(visit,0,sizeof(visit));
memset(val,0,sizeof(val));
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&a,&b,&d,&q);
if(MAP[a][b]>d)
{
MAP[a][b]=MAP[b][a]=d;
w[a][b]=w[b][a]=q;
}
}
cin>>ss>>tt;
}
int findmin()
{
int min=INF,ANS=0;
for(int i=1;i<=n;i++)
{
if(visit[i]==0)
{
if(dist[i]<min)
{
min=dist[i];
ANS=i;
}
}
}
return ANS;
}
void dijstra(int s)
{
dist[s]=0;
for(int i=1;i<=n;i++)
{
s=findmin();
visit[s]=1;
for(int j=1;j<=n;j++)
{
if(dist[j]>dist[s]+MAP[s][j])
{
dist[j]=dist[s]+MAP[s][j];
val[j]=val[s]+w[s][j];
}
else if(dist[j]==dist[s]+MAP[s][j]&&val[j]>val[s]+w[s][j])
val[j]=val[s]+w[s][j];
}
}
}
void init()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
void solve()
{
dijstra(ss);
printf("%d %d\n",dist[tt],val[tt]);
}
int main()
{
// init();
while(cin>>n>>m&&n&&m)
{
input();
solve();
}
}
【迪杰斯特拉双关键字最短路】【HDU3790】【最短路径问题】的更多相关文章
- 迪杰斯特拉算法dijkstra(可打印最短路径)
#include <iostream> #include <iomanip> #include <string> using namespace std; #def ...
- bfs输出路径 && 最短路(迪杰斯特拉)输出路径
问题描述 解决方法 1.像第一个问题那就是最短路问题(我代码采用迪杰斯特拉算法)实现 2.换乘次数最少,那就用bfs广搜来寻找答案.但是我的代码不能保证这个最少换乘是最短路程 代码 1 #includ ...
- HDU6166-Senior Pan-Dijkstra迪杰斯特拉算法(添加超源点,超汇点)+二进制划分集合-2017多校Team09
学长好久之前讲的,本来好久好久之前就要写题解的,一直都没写,懒死_(:з」∠)_ Senior Pan Time Limit: 12000/6000 MS (Java/Others) Memor ...
- 迪杰斯特拉(Java)
public class Dijsktra { public static void main(String[] args) { Dijsktra d=new Dijsktra(); int[][] ...
- dijkstra算法(迪杰斯特拉算法)
dijkstra算法(迪杰斯特拉算法) 用途:有向图最短路径问题 定义:迪杰斯特拉算法是典型的算法,一般的表述通常有两种方式,这里均采用永久和临时标号的方式,该算法要求图中不存在负权边 用永久和临时标 ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- 数据结构图之三(最短路径--迪杰斯特拉算法——转载自i=i++
数据结构图之三(最短路径--迪杰斯特拉算法) [1]最短路径 最短路径?别乱想哈,其实就是字面意思,一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两 ...
- pat1003 迪杰斯特拉法和dfs求最短路
本题的背景是求定点和定点之间的最短路问题(所有的最短路 不是一个解 是全部解,方法手段来自数据结构课程中的迪杰斯特拉算法和dfs(深度优先遍历). 分别用两种方法编程如下代码 dfs #includ ...
- HDU 2544最短路 (迪杰斯特拉算法)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Time Limit: 5000/1000 MS (Java/Others) Me ...
随机推荐
- IOS开发之---触摸和手势
Touch:在与设备的多点触摸屏交互时生成. 响应者对象 响应者对象就是可以响应事件并对事件作出处理.在iOS中,存在UIResponder类,它定义了响应者对象的所有方法.UIApplication ...
- 华为Java笔试题
华为Java笔试题+数据库题 一. 单项选择题 1.Java是从( )语言改进重新设计. A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确( ) A. Java程序经 ...
- Oracle SQL函数之转换函数
chartorowid(c1) [功能]转换varchar2类型为rowid值 [参数]c1,字符串,长度为18的字符串,字符串必须符合rowid格式 [返回]返回rowid值 [示例] SQL> ...
- SQL Server 两种判断表名是否存在且删除的方式
邓老师(老邓)教的 if exists(select * from sysobjects where name='Table_88') drop table Table_88 偷的((*^__^ ...
- linq读书笔记3-操作符之select与selectmany
linq对数据的查询方式的表达形式主要有两种: var demo =from p in pList where p.id=*** select p; var demo =pList.where(p=& ...
- G - 密码 kmp、贪心、manachar等等等等
G - 密码 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit Status ...
- [Effective Modern C++] Item 2. Understand auto type deduction - 了解auto类型推断
条款二 了解auto类型推断 基础知识 除了一处例外,auto的类型推断与template一样.存在一个直接的从template类型推断到auto类型推断的映射 三类情况下的推断如下所示: // ca ...
- 为什么JavaScript函数中的参数前面不能加var
首先这里是JavaScript的语法规则. 其次在调用function()函数的时候参数时外部传入的.在传入之前就已经被声明了.没必要在函数参数里声明. 如果想要在函数里用新的参数 function( ...
- PHP搭建(windows64+apache2.4.7+mysql-5.6+php5.5)
现在大部分一键安装包多是32位的,并不支持64位,直接在64位的系统上使用会报错的,所以我这里就来说说windows 64位系统如何建立Apache+PHP+MySQL环境的! 我这里演示用的wind ...
- Java API设计CheckList
API设计原则:正确.好名.易用.易学.够快.够小.但我们从来不缺原则,〜〜〜 Interface 1.The Importance of Being Use Case Oriented,一个接口应当 ...