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 -- 第一篇博客 -- 活着的意义
今年注定是不寻常的一年,因为技术,接触了许多大牛.通过一篇篇博文,看到了大牛们勤奋好学.孜孜不倦的精神,于是决定也开个博客,向大牛学习. 博客开了,写点什么呢?奈何肚子里墨水不多,吐出来也多是白沫,不 ...
随机推荐
- 如何简单的将手机投屏在windows上(可在电脑上直接操作手机)
首先附上要使用的scrcpy源地址 接下来是如何使用(我用的是安卓手机+win10): 下载好后,首先使用数据线连接手机到电脑,并且手机需要打开开发人员选项(不知道如何打开的自行百度): 打开到安装s ...
- JS事件冒泡及阻止
事件冒泡及阻止 当一个元素接收到事件的时候,会把他接收到的事件传给自己的父级,一直到window,当然其传播的是事件,绑定的执行函数并不会传播,如果父级没有绑定事件函数,就算传递了事件,也不会有什么表 ...
- Ansible Playbook 初识
Ansible Playbook 基本概述与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: ...
- H3C路由器地址池租期时间H3CMSR830-6BHI-WiNet
H3C路由器地址池租期时间H3CMSR830-6BHI-WiNet 设备H3CMSR830-6BHI-WiNet 先输入dis dhcp server tree pool 查看地址池名称,然后 < ...
- element-ui 的 单选按钮(Radio) 怎么取消文本显示?
方法一:<el-radio class="radio" v-model="radio" :label="1"> </el- ...
- js的预编译
JavaScript不会完全按照代码的顺序执行,在执行之前会对定义的函数和变量先来一边所谓的预编译处理. 先来说下对变量的预处理: console.log(a) //undefined var a = ...
- iOS 内存管理:从 MRC 到 ARC 实践
对于 iOS 程序员来说,内存管理是入门的必修课.引用计数.自动释放等概念,都是与 C 语言完全不同的. iOS 内存管理的核心是引用计数. 接触 MRC 时遇到最头疼的问题就是:为什么那么多 rel ...
- js生成一个指定范围内的随机整数
function __random(start=0, end=1) { return Math.floor(Math.random() * (end - start + 1) + start); } ...
- 分享淘宝时间服务器同步时间接口api和苏宁时间服务器接口api
最近要开发一款抢购秒杀的小工具,需要同步系统时间,这里分享两个时间服务器接口api给大家: 1.淘宝时间服务器时间接口 http://api.m.taobao.com/rest/api3.do?api ...
- Light of future-冲刺Day 4
目录 1.SCRUM部分: 每个成员进度 SCRUM 会议的照片 签入记录 代码运行截图 用户浏览界面 管理员浏览界面 2.PM 报告: 时间表 燃尽图 任务总量变化曲线 每名成员的贡献比 归属班级 ...