SDUT 2622 最短路径(Dijkstra)
题意 :中文不详述。
思路 :因为这个题加了一个要求就是路径数目得是x的倍数。所以在原来算法的一维dis数组增加到二维,用来存走的路径数%x。也可以用spfa做。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream> using namespace std ; #define LL long long
const int maxn = ;
const int maxm = ;
bool vis[maxn][maxn] ;
const LL INF = 1LL<< ;
int cnt = ;
int head[maxn] ;
LL dist[maxn][maxn] ;
int n , m ; struct node
{
int u,v,w ;
int next ;
}Edge[maxm] ; void addedge(int u,int v,int w)
{
Edge[cnt].u = u ;
Edge[cnt].v = v ;
Edge[cnt].w = w ;
Edge[cnt].next = head[u] ;
head[u] = cnt++ ;
} LL dijkstra(int s,int t,int x)
{
for(int i = ; i < n ; i++)
for(int j = ; j < x ; j++)
{
dist[i][j] = INF ;
vis[i][j] = false ;
}
dist[s][] = ;
while(true)
{
LL minn = INF ;
int u = - ;
int flag , xx ;
for(int i = ; i < n ; i++)
{
for(int j = ; j < x ; j++)
{
if(!vis[i][j] && minn > dist[i][j])
{
minn = dist[i][j] ;
u = i ;
flag = j ;
xx = (flag+)%x ;
}
}
}
if(u == -) return - ;
vis[u][flag] = true ;
if(vis[t][]) return dist[t][] ;
for(int j = head[u] ; j != - ; j = Edge[j].next)
{
int v = Edge[j].v ;
if(!vis[v][xx] && minn + Edge[j].w < dist[v][xx])
dist[v][xx] = minn + Edge[j].w ;
}
}
}
int main()
{
int T,s,t,x ;
scanf("%d",&T) ;
while(T--)
{
cnt = ;
memset(head,-,sizeof(head)) ;
// memset(vis,false,sizeof(vis) ) ;
scanf("%d %d",&n,&m) ;
int u,v, w ;
for(int i = ; i < m ; i++)
{
scanf("%d %d %d",&u,&v,&w) ;
addedge(u,v,w) ;
}
scanf("%d %d %d",&s,&t,&x) ;
LL ans = dijkstra(s,t,x) ;
if(ans != -)
printf("%lld\n",dist[t][]) ;
else printf("No Answer!\n") ;
}
return ;
}
SDUT 2622 最短路径(Dijkstra)的更多相关文章
- 最短路径 dijkstra
最短路径 dijkstra #include <stdio.h> #include <string.h> #include <limits.h> #define M ...
- 网络最短路径Dijkstra算法
最近在学习算法,看到有人写过的这样一个算法,我决定摘抄过来作为我的学习笔记: <span style="font-size:18px;">/* * File: shor ...
- c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- 最短路径——Dijkstra算法和Floyd算法
Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...
- 最短路径-Dijkstra算法与Floyd算法
一.最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1 ADE:2 ADCE:3 ABCE:3 ②在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径 ...
- 数据结构实验之图论七:驴友计划 ( 最短路径 Dijkstra 算法 )
数据结构实验之图论七:驴友计划 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- 最短路径——Dijkstra算法以及二叉堆优化(含证明)
一般最短路径算法习惯性的分为两种:单源最短路径算法和全顶点之间最短路径.前者是计算出从一个点出发,到达所有其余可到达顶点的距离.后者是计算出图中所有点之间的路径距离. 单源最短路径 Dijkstra算 ...
- 有向网络(带权的有向图)的最短路径Dijkstra算法
什么是最短路径? 单源最短路径(所谓单源最短路径就是只指定一个顶点,最短路径是指其他顶点和这个顶点之间的路径的权值的最小值) 什么是最短路径问题? 给定一带权图,图中每条边的权值是非负的,代表着两顶点 ...
随机推荐
- 【linux错误解决】MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'的问题
问题描述: 从一台linux远程连接另一台linux上的MySQL, 出现ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.x ...
- Linux VIM python 自动补全插件:pydiction
Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件. Pydiction不需要安装,所有没有任何依赖包问题,Pydiction主要包含三个文件. pyth ...
- 汇总文件数据 VBA
1 读取30个文件的数据信息 2 根据4个key值,判断累计数据 3 做sum , avg Sub 月汇总() Dim MyPath, MyName, AWbName Dim Wb As Workbo ...
- 第二篇、HTML5新增标签
<html> <head> <meta charset="UTF-8"> <title>html5新增的标签</title&g ...
- iOS 分类思想(2)
/******************* NSString+NumCount.h文件 ******************************/ #import <Foundation/Fo ...
- jQuery1.8以上,ajaxSend,ajaxStart等一系列事件要绑定在document上才有效果
jQuery1.8以上,ajaxSend,ajaxStart等一系列事件要绑定在document上才有效果
- OpenSUSE共享网络
因为想要使用Arduino Ethernet扩展版,想要搭建一个局域网供其使用有线,无奈路由器离我太远.遂有本文. 实验器材: 装有OpenSUSE.有线网卡.无线网卡的笔记本. 路由器一台. 实验步 ...
- 请求与通配符 mime 映射相匹配。请求映射到静态文件处理程序。如果有不同的前提条件,请求将映射到另一个处理程序。
打开IIS管理器,找到“处理程序映射”,在列表右击选择“添加脚本映射”即可.eg:*.aspx,将该类型的页面的处理程序映射为“%windir%\Microsoft.NET\Framework\v4. ...
- scroll
var fScrollTopHeight = function(){ return document.documentElement&&document.documentElement ...
- PhpStorm一次性折叠所有函数或者方法
有时候一个类实里面的方法实在太多了,要找到指定的方法很慢,我一般都是通过ctrl+F12直接显示一个弹出层,里面只有这个类的属性和方法,点击就能快速定位了.但是有时候是一个类里面找来找去,这个访问就不 ...