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模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
随机推荐
- Centos6.6部署Redis集群
Centos6.6部署Redis集群 1环境准备 1环境安装redis 1安装ruby 2配置redis主从环境 3部署redis sentinel服务器 5集群使用 13当前集群环境说明 13测试功 ...
- python singleton 4种单例
def singleton(cls, *args, **kwargs): instances = {} def inner(cls, *args, **kwargs): if cls not in i ...
- Excel2016怎么批量删除空白行 如何删除空白行
我们在编辑Excel文档的时候,如果表格中有大量的空白行,这时我们怎么样把它们批量删除呢?下面我们就一起来看看操作的方法吧. 工具/原料 Excel2016 方法/步骤 首先在电脑上打 ...
- 10 面向对象(package关键字的概述及作用)
10.01_面向对象(package关键字的概述及作用) A:为什么要有包 *开发时有很多类,如果放在一个文件夹中不方便管理,而且容易重复 将字节码(.class)进行分类存放 包其实就是文件夹 B: ...
- Python List列表的操作说明
Python中List的N种操作,其简单程度令人叹为观止... C:\Users\rhys>python Python 2.7.14 (v2.7.14:84471935ed, Sep 16 20 ...
- Linux(三)—— 项目部署环境搭建
目录 项目部署环境搭建 一.linux上网 二.rpm包管理 1.光盘挂载 2.安装卸载rpm包 3.查询是否安装 4.查看软件包 5.互相依赖关系的软件包 三.yum包管理 1.使用aliyun的y ...
- 【纯净软件】三款照片EXIF信息删除软件 Clear Exif、JPEG & PNG Stripper、Easy Exif Delete 非专业横向对比
商业软件:需支付费用后方可使用. 共享软件:需支付费用,但可以先免费试用(有使用期限.功能限制). 免费软件:无需支付费用,无使用期限,无功能限制. 纯净软件:无广告.无联网行为的免费软件. 自由软件 ...
- goland 实用键
代码补全 option + command + v
- java爬取猫咪上的图片
首先是对知识点归纳 1.用到获取网页源代码,分析图片地址,发现图片的地址都是按编号排列的,所以想到用循环获取 2.保存图片要用到流操作和文件操作,对两部分知识进行了复习巩固 3.保存后的图片有一部分是 ...
- myeclipse中出现The method xxx of type must override or implement a supertype
出现问题提示:The method xxx of type must override or implement a supertype? annotation:@Override的原因 查阅了一下资 ...