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模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
随机推荐
- 浏览器地址栏运行HTML代码(谷歌)
在地址栏输入 data:text/html,<h1 style='color:red' >Hello, world!</h1> 浏览器会执行你的html代码,效果如下: 如果觉 ...
- 6个实例详解如何把if-else代码重构成高质量代码
本文提纲: 为什么我们写的代码都是if-else?这样的代码有什么缺点?是否有优化的方法?如何重构?异常逻辑处理型重构方法状态处理型重构方法为什么我们写的代码都是if-else?程序员想必都经历过这样 ...
- CompletableFuture提高你并发编程能力
思考:如果有两个顺序执行耗时的方法,你该怎么做??? 例如: public void doHousework() { //烧水 doWater(); //扫地 doFloor(); } 没错,聪明如我 ...
- Linux命令 uname
1.简介 管理系统而使用的命令,用于显示系统信息(不同linux版本可能有写差异) 2.语法 uname [-amnrsv] (1) -a,--all 显示所有的信息 (2) -s,--kernel- ...
- P3203 [HNOI2010]弹飞绵羊(LCT)
弹飞绵羊 题目传送门 解题思路 LCT. 将每个节点的权值设为\(1\),连接\(i\)和\(i+ki\),被弹飞就连上\(n\),维护权值和\(sum[]\).从\(j\)弹飞需要的次数就是\(sp ...
- 2019ccpc网络赛hdu6703 array(线段树)
array 题目传送门 解题思路 操作1是把第pos个位置上的数加上\(10^7\),操作2是找到区间[1,r]中没有且大于k的最小的数.注意到k的范围是小于等于n的,且n的范围是\(10^5\),远 ...
- Django框架(二十八)—— Django缓存机制
目录 Django缓存机制 一.什么是缓存 二.Django的6中缓存方式及配置(只需要改配置文件) 1.开发调试缓存(此模式为开发调试使用,实际上不执行任何操作) 2.内存缓存(将缓存内容保存至内存 ...
- Java DOM解析器 - 修改XML文档
这是我们需要修改的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="UTF-8&q ...
- python调用tushare获取沪深股通十大成交股
接口:hsgt_top10 描述:获取沪股通.深股通每日前十大成交详细数据 注:tushare库下载和初始化教程,请查阅我之前的文章 输入参数 名称 | 类型 | ...
- SpringMVC学习(4):数据绑定1 @RequestParam
在系列(3)中我们介绍了请求是如何映射到一个action上的,下一步当然是如何获取到请求中的数据,这就引出了本篇所要讲的内容-数据绑定. 首先看一下都有哪些绑定数据的注解: 1.@RequestPar ...