Floyd算法-蓝桥杯

目录

简介:

核心思想:

算法步骤:

例题:

题目描述:

输入描述:

输出描述:


简介:

Floyd算法,是一种用于求解所有节点对之间最短路径的动态规划算法。它能够在有向图或带权无向图中找到任意两个节点之间的最短路径。

核心思想:

Floyd算法的核心思想是通过逐步改进路径的选择来逐渐求得最短路径。该算法使用一个二维的距离矩阵来记录任意两个节点之间的最短路径长度,并通过不断更新这个矩阵来逐步优化路径。

算法步骤:

  1. 初始化距离矩阵:将距离矩阵初始化为图中节点之间的直接距离。如果两个节点之间没有直接连接,则将距离设置为无穷大。

  2. 通过遍历每一个节点k,尝试将节点k作为路径上的中间节点,更新距离矩阵中的路径长度,具体地,对于每对节点i和j,如果从节点i经过节点k到达节点j的路径比当前的最短路径更短,则更新距离矩阵中的路径长度。

  3. 重复第二步,对于每一个节点k,继续尝试更新距离矩阵中的路径长度,直到遍历完所有节点。

  4. 最后,距离矩阵中的值就是任意两个节点之间的最短路径长度。

例题:

蓝桥杯题目链接:lhttps://www.lanqiao.cn/problems/1121/learning/?page=1&first_category_id=1&second_category_id=8

1.题目描述:

公园有N个景点,景点与景点之间一共有M条道路。小明有Q个观景计划,每个计划包含一个起点st和一个终点ed,表示他想从st到ed。但是小明的体力有限,对于每个计划他想走最少得路完成,你可以帮他吗?

2.输入描述:

输入第一行包含三个正整数,N,M,Q

第2到M+1行每行包含三个正整数u,v,w,表示u<->v之间存在一条距离为w的路。

第M+2到M+Q-1行每行包含两个正整数st,ed,其含义如题所述。

3.输出描述:

输出共Q行,对应输入数据中的查询。

若无法从st到达ed则输出-1。

#include <bits/stdc++.h>
using namespace std;
long long s[405][405];
long long ans;
typedef long long ll;
const ll INF = 0x3f3f3f3f3f3f3f3fLL;
int main()
{
  long long w;
  int st,ed;
  int n,m,q;
  int u,v;
  cin>>n>>m>>q;
  memset(s,0x3f,sizeof(s));
   for (int i = 1; i <= n; i++) s[i][i] = 0;
  for(int i=0;i<m;i++)
  {
    cin>>u>>v>>w;
     s[u][v] =s[v][u] = min(s[u][v], w);
  }
  for(int k=1;k<=n;++k)
  {
      for(int i=1;i<=n;i++)
      {
          for(int j=1;j<=n;j++)
          {
          s[i][j]=min(s[i][j],s[i][k]+s[k][j]);    
          }
      }
  }
  for(int i=0;i<q;i++)
  {
      cin>>st>>ed;
    ans = s[st][ed] == INF ? -1 : s[st][ed];
    cout << ans << endl;
  }
  return 0;
}

                                                                                                                                                                                                                                                               

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值