哈哈哈你不会真的点进来了吧😄
//顶级垃圾程序
//A very bad program
#include <bits/stdc++.h>
using namespace std;
const int MAXSIZE = 1e5 + 5;
const int INF = 1e6 + 5;
/*
函数名:dijkstra() 迪科斯彻最短路径算法
参数:Begin:源点的索引;End:终点的索引;
prev[]:前驱数组,即prev[i]为从Begin到i最短路径时,i前面那个顶点的索引
dist[]:距离数组,即dist[i]是Begin到i的最短路径的长度
n:点的数量
功能:算出从源点下标到其余点最短路径,轨迹记录在prev[],距离记录在dist[]。
*/
int n, g[MAXSIZE][MAXSIZE];
void dijkstra(int Begin, int End, int prev[], int dist[], int n){
int i, j, k;
int ans;
int tmp;
bool flag[n]; //flag[i]=1表示Begin->i的最短路径已获取
//初始化
for (int i = 0; i < n; i++){
flag[i] = 0; //还没找到
prev[i] = Begin; //i的前驱顶点为0
dist[i] = g[Begin][i]; //顶点i的最短路径为Begin->i的权
}
flag[Begin] = 1;
dist[Begin] = 0;
for (i = 1; i < n; i++){
ans = INF;
for (j = 0; j < n; j++){
//若从Begin->j距离<ans,而且从Begin->j的最短路径还未获取
if (!flag[j] && dist[j] < ans){
ans = dist[j];//改变最近距离
k = j; //记录一下
}
}
//在未获取最短路径的顶点中,找到离Begin最近的顶点k
flag[k] = 1; //标记顶点k,dist[k]已确定
if (k == End){ //结束了
break; //没了
}
//已知顶点k的最短路径后,更新未获取最短路径的顶点的最短路径和前驱顶点
for (int j = 0; j < n; j++){
tmp = (g[k][j] == INF ? INF : (ans + g[k][j])); //防溢出
if (flag[j] == 0 && (tmp < dist[j])){//若j还不是最短距离且k->j距离比记录的进
prev[j] = k;
dist[j] = tmp;
}
}
}
}
int main(){
return 0;
}