最短路径问题 HDU3790 (dijkstra)

时间:2022-06-04 07:11:03

基础的dijkstra问题  加上了花费

#include<bits/stdc++.h>
using namespace std; int m1[][][];
int vis[];int dis[];
#define INF 99999
int n,e,cas;
int m;
int cos1[]; void dijkstra(int v0)
{
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++){dis[i]=(i==v0?:INF);cos1[i]=(i==v0?:INF);} vis[v0]=;
for(int i=;i<n-;i++)
{
int minn=INF,u=v0;
for(int j=;j<=n;j++)
{
if(vis[j]==&&dis[j]<minn)
{
u=j;minn=dis[j]; } }
vis[u]=;
for(int j=;j<=n;j++)
{
if(dis[u]+m1[u][j][]<dis[j])
{
dis[j]=dis[u]+m1[u][j][];
cos1[j]=cos1[u]+m1[u][j][];
}
else if(dis[u]+m1[u][j][]==dis[j]&&cos1[u]+m1[u][j][]<cos1[j])
{ cos1[j]=cos1[u]+m1[u][j][];
}
} } } int main()
{
while(scanf("%d%d",&n,&m)==&&(n+m) )
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i==j)m1[i][j][]=m1[i][j][]=;
else m1[i][j][]=m1[i][j][]=INF;
}
while(m--)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
if( m1[a][b][]>c )
{
m1[a][b][]=m1[b][a][]=c;
m1[a][b][]=m1[b][a][]=d; }
else if(m1[a][b][]==c&&d<m1[a][b][])
{
m1[a][b][]=m1[b][a][]=d; } }
int s,e;
scanf("%d%d",&s,&e);
dijkstra(s);
printf("%d %d\n",dis[e],cos1[e]); } }

回顾:

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std; #define N 1005
#define inf 0x3f3f3f3f int n,e,m,s;
int vis[N],dis[N],mp[N][N];
int cost[N][N],cos[N]; void dijkstra(int s)
{
memset(vis,,sizeof vis);
for(int i=;i<=n;i++)
dis[i]=inf;
dis[s]=;
for(int i=;i<=n;i++)
cos[i]=inf;
cos[s]=;
for(int i=;i<=n;i++)
{
int minn=inf,u=-;
for(int j=;j<=n;j++)
if(dis[j]<minn&&!vis[j])
{
minn=dis[j];u=j;
}
if(u==-)return ;
vis[u]=;
for(int j=;j<=n;j++)
{
if(dis[j]>dis[u]+mp[u][j])
{
dis[j]=dis[u]+mp[u][j];
cos[j]=cos[u]+cost[u][j];
}
else if(dis[j]==dis[u]+mp[u][j])
{
cos[j]=min(cos[j],cos[u]+cost[u][j]);
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)==&&(n+m))
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i==j)mp[i][i]=;
else mp[i][j]=inf;
if(i==j)cost[i][i]=;
else cost[i][j]=inf;
}
while(m--)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(mp[a][b]>c)
mp[a][b]=mp[b][a]=c,cost[a][b]=cost[b][a]=d;
}
scanf("%d%d",&s,&e);
dijkstra(s);
printf("%d %d\n",dis[e],cos[e]);
}
return ;
}

最短路径问题 HDU3790 (dijkstra)的更多相关文章

  1. C&plus;&plus;编程练习&lpar;11&rpar;----&OpenCurlyDoubleQuote;图的最短路径问题&OpenCurlyDoubleQuote;(Dijkstra算法、Floyd算法)

    1.Dijkstra算法 求一个顶点到其它所有顶点的最短路径,是一种按路径长度递增的次序产生最短路径的算法. 算法思想: 按路径长度递增次序产生算法: 把顶点集合V分成两组: (1)S:已求出的顶点的 ...

  2. 最短路径问题的Dijkstra算法

      问题 最短路径问题的Dijkstra算法 是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出.迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法终于得到一个最短路径树>    ...

  3. 非负权值有向图上的单源最短路径算法之Dijkstra算法

    问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...

  4. 单源最短路径问题2 &lpar;Dijkstra算法&rpar;

    用邻接矩阵 /* 单源最短路径问题2 (Dijkstra算法) 样例: 5 7 0 1 3 0 3 7 1 2 4 1 3 2 2 3 5 2 4 6 3 4 4 输出: [0, 3, 7, 5, 9 ...

  5. 最短路径问题:Dijkstra算法

    定义 所谓最短路径问题是指:如果从图中某一顶点(源点)到达另一顶点(终点)的路径可能不止一条,如何找到一条路径使得沿此路径上各边的权值总和(称为路径长度)达到最小. 下面我们介绍两种比较常用的求最短路 ...

  6. 最短路径问题的Dijkstra和SPFA算法总结

    Dijkstra算法: 解决带非负权重图的单元最短路径问题.时间复杂度为O(V*V+E) 算法精髓:维持一组节点集合S,从源节点到该集合中的点的最短路径已被找到,算法重复从剩余的节点集V-S中选择最短 ...

  7. 网格最短路径算法(Dijkstra &amp&semi; Fast Marching)

    Dijkstra算法是计算图中节点之间最短路径的经典算法,网上关于Dijkstra算法原理介绍比较多,这里不再多讲.值得一提的是,当图中节点之间的权重都为1时,Dijkstra算法就变化为一般意义上的 ...

  8. 最短路径算法之Dijkstra算法&lpar;java实现&rpar;

    前言 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知 ...

  9. 图中最短路径算法(Dijkstra算法)(转)

    1.Dijkstra 1)      适用条件&范围: a)   单源最短路径(从源点s到其它所有顶点v); b)   有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E ...

随机推荐

  1. django - 好的 获取 参数值 方法

    第一步: # 参数列表 parameters = ('user_id', 'day_time', 'normal_data', 'hourly_data', 'product_id') # 需要传入的 ...

  2. 解决Easyui1&period;3&period;3 IE8兼容性问题

    事先声明:项目在Firefox和Chrome上完美运行,在MSIE9.MSIE10上基本没问题,但是放在MSIE8上面运行问题就出来了.登录系统后,系统页面跳动,导致系统无法使用:我使用的是Easyu ...

  3. MyBatis记录

    记录一下MyBatis的几个模块大纲,除去缓存以及集合映射两个部分 Mybatis架构 1. mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了myb ...

  4. python全栈开发-Day4 列表

    python全栈开发-Day4 列表 一.首先按照以下几个点展开列表的学习 #一:基本使用 1 用途 2 定义方式 3 常用操作+内置的方法 #二:该类型总结 1 存一个值or存多个值 只能存一个值 ...

  5. ARIMA模型原理

    一.时间序列分析 北京每年每个月旅客的人数,上海飞往北京每年的游客人数等类似这种顾客数.访问量.股价等都是时间序列数据.这些数据会随着时间变化而变化.时间序列数据的特点是数据会随时间的变化而变化. 随 ...

  6. c&sol;c&plus;&plus;线性队列

    线性队列 队列是先进先出,和栈相反. 不循环的队列就是浪费空间,如果tail到了最大值后,即使前面出队了,有空的位置,也不能再入队. seqqueue.h #ifndef __SEQQUEUE__ # ...

  7. PCL的PNG文件和计算点云重心

    PCL提供节约一点云的值为一个PNG图像文件的可能方案.显然,这只能用有序的点云来完成,因为生成的图像的行和列将与点云的对应完全一致.例如,如果你从一个传感器Kinect或Xtion的点云,你可以用这 ...

  8. 29、HashSet简介

    Set的特点 Set里面存储的元素不能重复,没有索引,存取顺序不一致. package com.monkey1024.set; import java.util.HashSet; /** * Set的 ...

  9. wikioi 1163 訪问艺术馆 树形dp

    递归建树,由题知该树是一棵二叉树,且除根节点外其它点的度为0或2. dp[i][j]表示来到第i个走廊(还未走过这条走廊)还剩下j时间,能拿到最大的画的数量. dp[i][j]=max(dp[i][j ...

  10. Python zfill&lpar;&rpar; 方法

    描述 Python zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0. 语法 zfill()方法语法: S.zfill(width) 参数 width -- 指定字符串的长度.原字 ...