数据结构实验之图论七:驴友计划【迪杰斯特拉算法】(SDUT 3363)
分析:可以求简单的任意两点间最短距离的稍微变形,一个板子题。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int inf = 0x3fffff;
int gra[1005][1005];
int mon[1005][1005];
int vis[1005];
int dist[1005];
int cost[1005];
void dijkstra(int s,int d,int n)
{
memset(vis,0,sizeof(vis));
for(int i = 0; i <= n; i ++) dist[i] = gra[s][i],cost[i] = mon[s][i];
int Min = inf, v, Micost = inf;
for(int i = 1; i <= n; i ++)
{
Min = Micost = inf;
for(int j = 1; j <= n; j ++)
{
if(!vis[j]){
if(dist[j] < Min){Min = dist[j];
v = j;
Micost = cost[j];
}
else if(dist[j] == Min)
{
if(cost[j] < Micost) {
Min = dist[j];
v = j;
Micost = cost[j];
}
}
}
}
vis[v] = 1;
for(int j = 1; j <= n; j ++)
{
if(!vis[j]){
if(dist[j] > gra[v][j] + dist[v])dist[j] = gra[v][j] + dist[v],cost[j] = mon[v][j] + cost[v];
else if(dist[j] == gra[v][j] + dist[v]) {
if(cost[j] > cost[v] + mon[v][j]){
dist[j] = gra[v][j] + dist[v],cost[j] = mon[v][j] + cost[v];
}
}
}
}
}
printf("%d %d\n",dist[d], cost[d]);
}
int main()
{
int n,m,u,v,w,p,s,d,t;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d",&n,&m,&s,&d);
for(int i = 0; i<= n; i ++)
{
for(int j = 0; j <= n; j ++)
{
if(i == j) gra[i][j] = 0,mon[i][j] = 0;
else gra[i][j] = inf,mon[i][j] = inf;
}
}
for(int i = 0; i < m; i ++)
{
scanf("%d%d%d%d",&u,&v,&w,&p);
gra[u][v] = gra[v][u] = w;
mon[u][v] = mon[v][u] = p;
}
dijkstra( s,d, n);
}
return 0;
}
数据结构实验之图论七:驴友计划【迪杰斯特拉算法】(SDUT 3363)的更多相关文章
- SDUT 3363 数据结构实验之图论七:驴友计划
数据结构实验之图论七:驴友计划 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 做为一个资深 ...
- 数据结构实验之图论七:驴友计划 ( 最短路径 Dijkstra 算法 )
数据结构实验之图论七:驴友计划 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现
在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...
- 数据结构---公交线路提示系统05(内附读取表格+迪杰斯特拉算法Java代码)
今天做的最多的事情就是纠错了,通过添加输出语句判断错误来源: 找到错误来源: wb = new XSSFWorkbook(input);//语句创建错误 网上查询发现是jar包的问题: 下图为poi的 ...
- 图论——迪杰斯特拉算法(Dijkstra)实现,leetcode
迪杰斯特拉算法(Dijkstra):求一点到另外一点的最短距离 两种实现方法: 邻接矩阵,时间复杂度O(n^2) 邻接表+优先队列,时间复杂度O(mlogn)(适用于稀疏图) (n:图的节点数,m:图 ...
- 最短路问题:迪杰斯特拉算法(Dijsktra)
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...
- 最短路径之迪杰斯特拉算法的Java实现
Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知识准备 ...
- 图解Dijkstra(迪杰斯特拉)算法+代码实现
简介 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代表性的 ...
- 迪杰斯特拉算法c语言实现
/*http://1wangxiaobo@163.com 数据结构C语言版 迪杰斯特拉算法 P189 http://1wangxiaobo@163.com 编译环境:Dev-C++ 4.9.9.2 ...
随机推荐
- Python之算法评估-4
一.评估算法的方式分两种,一种是分类算法的评估,一种是回归算法的评估.为什么要分两种呢,因为分类算法中可以通过准确率.精准率.召回率.混淆矩阵.AUC来评估算法的准确度.但是在预测值的时候是没有办法去 ...
- Authentication failed for "http://xxxxxx"
1.配置用户信息 git config --global user.name [username] git config --global user.email [email] 2.查询用户信息 ...
- 转 C# GDI+ 实现橡皮筋技术
http://www.cnblogs.com/arxive/p/6080085.html 应该有很多人都在寻找这方面的资料,看看下面我做的,或许对你会有所帮助,但愿如此. 为了实现橡皮筋技术,我用了两 ...
- 用.net4中的DynamicObject实现简单AOP
public class DynamicWrapper : DynamicObject { private readonly object source; public DynamicWrapper( ...
- google mock C++单元测试框架
转:google mock C++单元测试框架 2012-03-12 09:33:59 http://blog.chinaunix.net/uid-25748718-id-3129590.html G ...
- source tree每次push都需要密码的解决方法
Windows首先可以考虑使用GitHub for Windows,它已经包含了该助手,或者可以下载对应系统的版本:Windows 7.Windows 8.Source 版本,然后解压缩文件并将里面的 ...
- 安装xshell、xftp
1.Xshell的软件的下载.安装 xshell是一个终端模拟软件,而且是远程近程都可以. 就是模拟服务器所在的linux,在xshell中可以输入命令, 就像在服务器的linux中输入命令一样.一般 ...
- String.getBytes()方法中的中文编码问题
得到一个操作系统默认的编码格式的字节数组.这表示在不同的操作系统下,返回的东西不一样! byte[] a= "中".getBytes() String.getBytes(Strin ...
- javascript_05-操作符
一元运算符 a++和++a //5 2 3 var a =1; var b = ++a + ++a; console.log(b) //4 1 3 var a =1; var b = a++ + ++ ...
- 【DRF框架】序列化组件——字段验证
单个字段的验证 1.在序列化器里定义校验字段的钩子方法 validate_字段 2.获取字段的数据 3.验证不通过,抛出异常 raise serializers.ValidationError( ...