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算法
什么是最短路径? 单源最短路径(所谓单源最短路径就是只指定一个顶点,最短路径是指其他顶点和这个顶点之间的路径的权值的最小值) 什么是最短路径问题? 给定一带权图,图中每条边的权值是非负的,代表着两顶点 ...
随机推荐
- poj 1182 食物链(关系并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 62824 Accepted: 18432 Description ...
- EL表达式简单应用
<%@page import="java.util.HashMap"%> <%@page import="java.util.List"%&g ...
- Ehcache - hello world
Key Classes CacheManager The CacheManager class is used to manage caches. Creation of, access to, an ...
- 一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确
一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确 最近没事研究了下验证码的的动态生成及通过cookie实现HTML页面对用户输入的验证码的校验,简要如下: 1.写 ...
- C语言对文件的相关命令
fopen(文件名,使用文件的方式):打开数据文件 fclose(FILE *fp):关闭数据文件 feof(FILE *fp):是判断是否到fp的结尾 fputc(char ch,FILE *fp) ...
- items 与iteritems
dict的items函数返回的是键值对的元组的列表,而iteritems使用的是键值对的generator. items当使用时会调用整个列表 iteritems当使用时只会调用值. >> ...
- SQLserver数据库基础
1·控制数据库的服务 运行 cmd 在控制面板输入 net start MSSQLserver (启动数据库服务) 在控制面板输入 net stop MSSQLserver ( ...
- 总结&记录
一.Git(linux命令) 1.tar 压缩/解压 -c 建立一个压缩文件(create) -x 解压一个压缩文件 -t 查看tarfile中文件 -z 是否具有gzip的属性?是否需要用gzip ...
- 关于四字节字符入库时错误的解决方案(Incorrect string value: '\xF0\x9F\x99\x8F' for column 'Reply_Content' at row 1)
1. 将表字段字符集设置成utf8mb4 2. 执行插入前执行:SET NAMES utf8mb4; 如: SET NAMES utf8mb4; INSERT test(Content) VALUES ...
- shell 数组
数组赋值:(1) array=(var1 var2 var3 ... varN)(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)(3) array ...