我是靠谱客的博主 含蓄溪流,这篇文章主要介绍第十二届蓝桥杯 填空 路径 Dijkstra算法,现在分享给大家,希望可以做个参考。

在这里插入图片描述

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const ll maxn = 2021 + 5;
const ll inf = 1e9;
vector<pair<int,ll>> a[maxn];
ll dist[maxn] , bk[maxn];
int main()
{
    ll n=2021;
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(abs(i-j)<=21){
                a[i].push_back(make_pair(j,i/__gcd(i,j)*j));
                a[j].push_back(make_pair(i,i/__gcd(i,j)*j));
            }
        }
    }
    for (int i = 1 ; i <= n ; i++)
        dist[i] = inf;
    dist[1]=0;
  
    for (int i = 1 ; i <= n ; i++){
        ll mi = inf;
        ll x;
        
        for (int j = 1 ; j <= n ; j++){
            if (bk[j] == 1) continue;
            if (mi > dist[j]){
                mi = dist[j];
                x = j;
            }
        }
        bk[x] = 1;
        for (auto g : a[x]){
            int v = g.first , w = g.second;
            dist[v] = min(dist[v] , dist[x] + w);
        }
    }
    cout<<dist[n];
    return 0;
}

最后

以上就是含蓄溪流最近收集整理的关于第十二届蓝桥杯 填空 路径 Dijkstra算法的全部内容,更多相关第十二届蓝桥杯内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(124)

评论列表共有 0 条评论

立即
投稿
返回
顶部