lanqiao 1460 路径(Dijkstra)
This commit is contained in:
43
12lanqiao/test5-1.cpp
Normal file
43
12lanqiao/test5-1.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
// lanqiao 1460 路径(Dijkstra)
|
||||||
|
#include<bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
const int N = 3e3 + 10, INF = INT_MAX;
|
||||||
|
int g[N][N]; // 领接矩阵
|
||||||
|
bool vis[N]; // 标记数组
|
||||||
|
int mindis[N]; // 最短路数组
|
||||||
|
int s = 1, n = 2021;
|
||||||
|
|
||||||
|
// 朴素版dijkstra-时间复杂度 O(n^2)
|
||||||
|
void dijkstra(int s){
|
||||||
|
mindis[s] = 0;
|
||||||
|
for(int i = 1; i <= n; i++){
|
||||||
|
int mi = INF, cur = 0;
|
||||||
|
for(int j = 1; j <= n; j++){
|
||||||
|
if(!vis[j] && mindis[j] < mi){
|
||||||
|
mi = mindis[j];
|
||||||
|
cur = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vis[cur] = 1; // 已经确定起点到cur点的最短距离,所以要标记
|
||||||
|
// 以cur点作为中转点去更新起点到其他各点的距离
|
||||||
|
for(int i = 1; i <= n; i++){
|
||||||
|
if(!vis[i]&&g[cur][i] != 0){
|
||||||
|
if(mi + g[cur][i] < mindis[i]){
|
||||||
|
mindis[i] = mi + g[cur][i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
for(int i = 1; i <= n; i++){
|
||||||
|
for(int j = max(i-21, 1); j < min(i+21, 2021); j++){
|
||||||
|
if(i != j) g[i][j] = g[j][i] = lcm(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fill(mindis, mindis + N, INF);
|
||||||
|
dijkstra(s);
|
||||||
|
cout << mindis[n] << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user