diji模板
void diji(int x){
fill(dis,dis+n,INT_MAX);
dis[x] = ;
for(int i=;i < n;i++) pre[i] = i;
while(){
int minn = INT_MAX;
int v = -;
for(int i=;i < n;i++){
if(!vis[i]&&dis[i] < minn){
v = i;
minn = dis[i];
}
}
if(v == -)break;
vis[v] = ;
for(int i=;i < n;i++){
if(!vis[i]&&cost1[i][v]!=INT_MAX&&dis[v]+cost1[i][v]<dis[i]){
dis[i] = dis[v] + cost1[i][v];
pre[i] = v;
}
}
}
}
初始化:
int main(){
int m,s;
cin >> n >> m >> s >> d;
for(int i=;i < n;i++){
for(int j=;j < n;j++){
cost1[i][j] = INT_MAX;
cost1[i][i] = ;
}
}
for(int i=;i < m;i++){
int x,y,a,b;
cin >> x >> y >> a >> b;
cost1[x][y] = a;
cost1[y][x] = a;
cost2[x][y] = b;
cost2[y][x] = b;
}
diji(s);
for(int i=;i < n;i++) cout << pre[i] << " ";
return ;
}
diji+dfs模板
#include<iostream>
#include<vector>
using namespace std;
const int maxv = ;
const int INF = 1e9 + ;
int G[maxv][maxv], d[maxv], C[maxv][maxv];
int n, m, s, dd, mincost = INF;
bool vis[maxv];
vector<int>pre[maxv];
vector<int>temp, path;
void Dijkstra(int s)
{
fill(d, d + maxv, INF);
d[s] = ;
while ()
{
int u = -, MIN = INF;
for (int i = ; i < n; i++)
{
if (!vis[i]&&d[i] < MIN)MIN = d[i], u = i;
}
if (u == -)return;
vis[u] = true;
for (int i = ; i < n; i++)
{
if (!vis[i] && G[u][i])
{
if (d[u] + G[u][i] < d[i])
{
d[i] = d[u] + G[u][i];
pre[i].clear(); //之前记录的不是最优的路,删去以后补上最优路的前项
pre[i].push_back(u);
}
else if (d[u] + G[u][i] == d[i])
{
pre[i].push_back(u);//相等的话增加一个前项点
}
}
}
}
}
void DFS(int v)
{
if (v == s)
{
temp.push_back(s);
int tempcost = ;
for (int i = temp.size() - ; i > ; i--)
{
int v = temp[i];
int u = temp[i - ];
tempcost += C[u][v];
}
if (tempcost < mincost)
{
mincost = tempcost;
path = temp;
}
temp.pop_back();
return;
}
temp.push_back(v);
for (int i = ; i < pre[v].size(); i++)
DFS(pre[v][i]);
temp.pop_back();
}
int main()
{
scanf("%d%d%d%d", &n, &m, &s, &dd);
for (int i = ; i < m; i++)
{
int c1, c2, dis, cost;
scanf("%d%d%d%d", &c1, &c2, &dis, &cost);
G[c1][c2] = G[c2][c1] = dis;
C[c1][c2] = C[c2][c1] = cost;
}
Dijkstra(s);
DFS(dd);
for (int i = path.size() - ; i >= ; i--)printf("%d ", path[i]);
printf("%d %d", d[dd], mincost);
return ;
}
——求相同路径的条数把pre[i]中有数的连城就好了8
https://www.liuchuo.net/archives/tag/dijkstra
diji模板的更多相关文章
- String Problem(模板)【最短路】
String Problem 题目链接(点击) Boy Valera likes strings. And even more he likes them, when they are identic ...
- Jade模板引擎让你飞
写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...
- ABP入门系列(2)——通过模板创建MAP版本项目
一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...
- CMS模板应用调研问卷
截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- OpenCV模板匹配算法详解
1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...
- 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
随机推荐
- AcWing 214. Devu和鲜花 (容斥)打卡
Devu有N个盒子,第i个盒子中有AiAi枝花. 同一个盒子内的花颜色相同,不同盒子内的花颜色不同. Devu要从这些盒子中选出M枝花组成一束,求共有多少种方案. 若两束花每种颜色的花的数量都相同,则 ...
- [CSP-S模拟测试]:影子(并查集+LCA)
题目描述 一个人有很多的影子,新的旧的,他们不断消失重来.学者的影子在他苍白色的精神图景里成为了$n$个黑色的点,他们伸长的触手交叉形成了一颗黑色的树.假使每个影子点拥有一个权值$d_i$,黑色的树边 ...
- [bzoj2456]mode 题解
改题改自闭的时候当然要靠水题来调节心情(逃 2456: mode Time Limit: 1 Sec Memory Limit: 1 MBSubmit: 8461 Solved: 3171[Sub ...
- sync.Once.Do(f func())
sync.Once.Do(f func())是一个挺有趣的东西,能保证once只执行一次,无论你是否更换once.Do(xx)这里的方法,这个sync.Once块只会执行一次. package mai ...
- MySQL高级学习笔记(六):MySql锁机制
文章目录 概述 定义 生活购物 锁的分类 从对数据操作的类型(读\写)分 从对数据操作的粒度分 三锁 表锁(偏读) 特点 案例分析 建表SQL 加读锁 加写锁 结论 如何分析表锁定 行锁(偏写) 特点 ...
- Vue篇1
2019 Vue 面试题汇总(持续更新中...) 1. vue中的MVVM模式 即Model-View-ViewModel. Vue是以数据为驱动的,Vue自身将DOM和数据进行绑定,一旦创建绑定,D ...
- 数据持久化之Android文件系统(一)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680 一.前言 文件系统一直是Android开发过程中经常接触的东西.而关于内 ...
- Java中使用File类删除文件夹和文件
删除工具类: import java.io.File; public class DeleteAll{ public static void deleteAll(File file){ if(file ...
- 面试经典:链表中倒数第k个结点?如何从大量数据中找出高频词?
记录两道面试题: 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(单向链表) 拿到这个问题的时候自然而然会想到让链表从末尾开始next K-1 次不就是第K-1个节点了么,但是必须要注意一 ...
- shell脚本 set命令