Floyd-例题-实现-我的第一篇博客
https://www.cnblogs.com/lbssxz/p/11014911.html
这是网上看到的题目,以上是原博主的解答和题目来源(没找到别的题目来源)
题目大意:
------------恢复内容结束------------
显然这是一个最短路问题,但是即便是最短路,即便确定了思路是FLOYD,仍然有很多不一样的思路。以下为我的思路和原本错误的方向——更新的对象错误。
很多最短路问题,出了模板题以外,难点就在于:
- 如何找到“最短”--的表示方式,最短可能有多种情况,可能有多个条件,像这题有多个因素变量,是否有优先权,是否在这之前需要贪心或者先排序操作。
- 路径的初始化问题,其他参数的初始化问题,需不需要中间变量做桥梁***
- 有了最短路的定义,该怎么操作“更新”也是个难题。本题的难点就在于更新——不同路径繁华度最大值总是会变,每次找到一条新路都需要检查和更新。
- 更新的对象,找错/找漏(我一开始的问题)
- 更新的办法有问题,不全面,更新的操作不全,需要分类讨论
- 更新的时候没有考虑到连锁影响,是否需要回溯或者重来
- 更新直接操作复杂,需要找中间桥梁+中间补充操作——原博主的办法
- 最短路只是题目中的一环,在这基础上还有别的算法需要综合使用。
这一环也是最容易出现问题的一环——常见问题:
对于这个问题,原博主使用的方式是贪心排序繁华度,除了繁华度,最短路的数组,另外又找了一个数组代替最终消费,然后每次都用通过排序直接对应新繁华度代替,
你会发现如果连续使用最短路,更新结果会变。因为更新是不统一的。(个人对原博主的解法还有疑问,以后再做补充)
而我的办法比较老土,就是简单的模拟,繁华度另开一个数组,每次把原来的繁华度减掉,然后加上新的繁华度,从而得到最短,这个结果是不会变的。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <limits.h>
using namespace std;
typedef long long ll;
const ll INF = 0x3f3f3f3f3f3f3f3fLL;
int a[][];
int n=;
const int I=0x3f3f3f3f;
int m=;
int q=;
int t[];
int p[][];//表示当前的最大繁华度
void floy0() {
//memset(a,0,sizeof(a)); for(int k=; k<=n; k++) {
for(int j=; j<=n; j++) {
for(int i=; i<=n; i++) {
/*
int d1=max(t[i],t[j]);
int d2=max(t[i],t[j]);
d2=max(d2,t[k]);
a[i][j]=a[j][i]=min(a[j][i]+d1,d2+a[j][k]+a[k][i]);*/
//上面这个式子错误在于,不是每次都加一次繁华度.
//而是最后得到ij之后加一次繁华度,每次应该更新这个繁华度
//更新的时候一减一加
//或者从一开始就从繁华度最大值最小优先筛选--排序贪心一次后再做
//存在更新不完全???
int l=;
if(a[j][k]<I&&a[k][i]<I&&p[i][k]<I&&p[j][k]<I) {
if(a[i][j]<I) {
l=max(p[j][k],p[i][k]);
if(a[j][i]>((a[j][k]-p[j][k])+(a[k][i]-p[k][i])+l)) {
a[j][i]=(a[j][k]-p[j][k])+(a[k][i]-p[k][i])+l;
p[i][j]=p[j][i]=l;
cout<<j<<"-->"<<i<<": "<<j<<"-->"<<k<<"-->"<<i<<endl<<endl;
} } else {
l=max(p[k][i],p[j][k]);
p[i][j]=p[j][i]=l;
a[i][j]=a[j][i]=(a[j][k]-p[j][k])+(a[k][i]-p[k][i])+l;
cout<<j<<"-->"<<i<<": "<<j<<"-->"<<k<<"-->"<<i<<endl<<endl;
} } //比较的是最短路净值所以后面那个式子里的每个减完再加 for(int i=; i<=n; i++) {
for(int j=; j<=n; j++) {
if(a[i][j]>=I||a[i][j]<)cout<<"!\t";
else cout<<a[i][j]<<"\t";
}
puts("");
}
puts(""); }
} } } int main () { scanf("%d%d%d",&n,&m,&q); memset(t,,sizeof(t));
memset(a,I,sizeof(a));
memset(p,I,sizeof(p));
for(int i=; i<=n; i++) {
scanf("%d",&t[i]);
a[i][i]=t[i];
p[i][i]=t[i];
}
while(m--) {
int i,j,w;
scanf("%d%d%d",&i,&j,&w);
p[i][j]=p[j][i]=max(t[i],t[j]);
a[i][j]=a[j][i]=w+p[i][j]; } puts("");
floy0();
return ;
}
Floyd-例题-实现-我的第一篇博客的更多相关文章
- 第一篇博客:Hello World
2016年10月10日,双十,好日子,决定开始写第一篇博客,标题想了会,就叫Hello World 吧,哈哈^_^. 首先感谢博客园的管理们能批准我的申请,记得在14年的时候申请过一次,竟然没申请通过 ...
- 我的第一篇博客 ——【ToDoList】小程序开发
我是一只即将大四的大三狗,这是我的第一篇博客,说来惭愧.今年1月份,学校放寒假的时候开始自学的IOS,放假的时候比较起劲,看了一堆Object-C的视频,然后照着中英文对照的IOS基础开发教程,做了两 ...
- Hello World -- 第一篇博客
今年注定是不寻常的一年,因为技术,接触了许多大牛.通过一篇篇博文,看到了大牛们勤奋好学.孜孜不倦的精神,于是决定也开个博客,向大牛学习. 博客开了,写点什么呢?奈何肚子里墨水不多,吐出来也多是白沫,不 ...
- Ginger的第一篇博客
怀着无感的心情,没有技术的身体,写下第一篇博客作为标记. 目前应该会搞清楚数据结构上相关的操作.算法,然后用c语言实现后记录在博客. 我是有目标的咸鱼! 2019/4/19
- “Hello, my first blog”------第一篇博客的仪式感
本人在校大学生一枚,开通博客,主要是想记录自己的学习过程,分享自己的学习经历.记得大一的时候,很多不懂的操作和知识,都是在博客上找到了相应的解决办法.但比较讽刺的是,很多时候,曾经解决了的问题,当再次 ...
- 我的第一篇博客。(JavaScript的声明和数据类型的一些笔记)
这是我的第一篇博客,务必请大家多多关照. 下面是前端js的变量和数据类型的一些笔记,不是很全请多多包涵. 1.变量 变量的声明 var 变量名 变量这个容器中放的是数据 变量的赋值 变量名 = 数据 ...
- 我的第一篇博客:不用sizeof求int的bit数
我的第一篇博客.. 还不会什么高端的东西就来点基础的. 不用sizeof求int的bit数 //不用sizeof求int的bit数 #include<stdio.h> int main( ...
- 第一篇博客 安装open live writer
第一篇博客安装open live writer http://openlivewriter.org/ 有的人可能会打不开,所以我准备了一个百度云的链接地址 链接:https://pan.baidu.c ...
- C博客作业00—我的第一篇博客
C博客作业00-我的第一篇博客 1. 你对网络专业或者计算机专业了解是怎样? 泛泛了解 - 原先只知道网络工程隶属于计算机工程学院,与院中其他专业一样,同样都需要学习大量的计算机基础知识,然后再分支学 ...
- Hello World -- 第一篇博客 -- 活着的意义
今年注定是不寻常的一年,因为技术,接触了许多大牛.通过一篇篇博文,看到了大牛们勤奋好学.孜孜不倦的精神,于是决定也开个博客,向大牛学习. 博客开了,写点什么呢?奈何肚子里墨水不多,吐出来也多是白沫,不 ...
随机推荐
- MyBatis框架——动态SQL
MyBatis 作为⼀个“半⾃动化”的 ORM 框架,需要开发者⼿动定义 SQL 语句. 在业务需求⽐较复杂的情 况下,⼿动拼接 SQL 语句的⼯作量会⾮常⼤,为了适⽤于不同的业务需求,往往需要做很多 ...
- shell脚本基础-起始句的含义
大部分的shell脚本第一行,要么是 #!/bin/bash 要么是 #!/bin/sh 其实第二种是第一种的升级版,增加了协议posix(#!/bin/sh = #!/bin/bash + posi ...
- mybatis入门详解
一.mybatis-config.xml文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP ...
- MySQL优化之慢查询日志
慢查询日志概述 所谓慢查询日志,就是用于记录MySQL中响应时间超过设定阈值的SQL语句,通过打开慢查询开关,MySQL会将大于阈值的SQL记录在日志中,以便于分析性能. 慢查询日志选项默认是关闭的, ...
- MP3音频文件的剪切合并方法
package com.bytx.ai.service.base.controller.util; import it.sauronsoftware.jave.Encoder;import it.sa ...
- JAVA——桌球游戏(动画)
跟着视频敲得 ,虽然不是自己的思路 ,不过对代码多了一点了解:涉及到继承类 主函数:创建一个BallGame对象,调用一个launchFrame函数 : launchFrame函数:严格来说是方法 , ...
- Hystrix 使用手册 | 官方文档翻译
由于时间关系可能还没有翻译全,但重要部分已基本包含 本人水平有限,如有翻译不当,请多多批评指出,我一定会修正,谢谢大家.有关 ObservableHystrixCommand 我有的部分选择性忽略了, ...
- springboot系列(三)配置文件详解
目录 properties 文件 1.语法 2.优先级 3.自定义数据配置 4.获取自定义数据配置 1.通过prefix获取 yml文件 1.语法 2.优先级 3.自定义数据配置. 4.获取自定义数据 ...
- 关于 IDEA 启动 springboot 项目异常 - Disconnected from the target VM, address: '127.0.0.1:59770', transport: 'socket'
关于 IDEA 启动 springboot 项目异常 - Disconnected from the target VM, address: '127.0.0.1:59770', transport: ...
- Pytest系列(4) - fixture的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 前面一篇讲了setup.te ...