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 -- 第一篇博客 -- 活着的意义
今年注定是不寻常的一年,因为技术,接触了许多大牛.通过一篇篇博文,看到了大牛们勤奋好学.孜孜不倦的精神,于是决定也开个博客,向大牛学习. 博客开了,写点什么呢?奈何肚子里墨水不多,吐出来也多是白沫,不 ...
随机推荐
- JS中iframe子页面与父页面之间通信
iframe子页面与父页面通信根据iframe中src属性是同域链接还是跨域链接,通信方式也不同. 一.同域下父子页面的通信 父页面parent.html <html> <head& ...
- Android项目目录结构模板以及简单说明
1) src 文件 编写java代码的文件目录,遵循java的命名规范.分包 2) gen 文件 包含了android的资源文件的标识符,是不需要程序员维护,是自动添加的 3) asse ...
- [树的深度] Party
Party A company has n employees numbered from 1 to n. Each employee either has no immediate manager ...
- office的高级应用
Word高级应用:设置斜线表头(一根:边框:多根:插入形状,按住鼠标拖动). 注意:1.用好样式功能 2.大量重复工作懂得批量处理 3.反复要做的固定操作固化成“模板”“套路” 4.碰到异常情况,知道 ...
- 使用Keras进行深度学习:(一)Keras 入门
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! Keras是Python中以CNTK.Tensorflow或者Th ...
- SG函数(斐波那契博弈) Fibonacci again and again
https://zhuanlan.zhihu.com/p/53948422 HDU - 1848 将这篇文章认真的看了一遍 ,虽然不是很懂 ,但是脑子里有了一个模型,链接里的图 (看的顺序 是 0,1 ...
- Swagger2 初始用
1.结合Spring-Boot 引入 pom 依赖 <dependency> <groupId>io.springfox</groupId> <artifa ...
- NSArray、NSDictionary
一.NSDictionary 1.1 使用自定义对象 key Dictionaries manage pairs of keys and values. A key-value pair within ...
- 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果
概要 最近写了spring系列,这个系列还在进行中,然后有些同学开始叫我大神,然后以为我各方面都比较厉害,当然了,我是有自知之明的,大佬大神什么的,当作一个称呼就好,如果真的以为自己就是大神,那可能就 ...
- MATLAB——m_map指南(1)
1.例图 (1) clear all m_proj('oblique mercator');%确定投影方式和绘图界线 m_coast;%画出海岸线 m_grid;%添加格网 第一行代码初始化投影,对于 ...