模板参考Kuangbin
数据结构方面:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
const int INF=0x3f3f3f3f;
bool vis[maxn];
int pre[maxn];//记录beg到i路径上的父结点 pre[beg]=-1;
int cost[maxn][maxn];//邻接矩阵
pre 可以记录从源点beg出发到I路径上的父节点
cost 就是邻接矩阵,u和v之间有路即标记为他们的路径长度,如果没有路即标为最大
vis 标记是否访问过
上代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
const int INF=0x3f3f3f3f;
bool vis[maxn];
int pre[maxn];//记录beg到i路径上的父结点 pre[beg]=-1;
int cost[maxn][maxn];//邻接矩阵
void Dijkstra(int const[][maxn],int lowcost[],int n,int beg)
{
for(int i=0;i<n;i++)
{
lowcost[i]=INF; vis[i]=false;pre[i]=-1;
}
lowcost[beg]=0;
for(int j=0;j<n;j++)
{
int k=-1;
int Min=INF;
for(int i=0;i<n;i++)
{
if(!vis[i]&&lowcost[i]<Min)
{
Min=lowcost[i];
k=i;
}
}
if(k==-1) break;
vis[k]=true;
for(int i=0;i<n;i++)
if(!vis[i]&&lowcost[k]+cost[k][i]<lowcost[i])
{
lowcost[i]=lowcost[k]+cost[k][i];
pre[i]=k;
}
}
}
int main ()
{
}
Dijkstra最短路径算法优先队列优化版:https://blog.csdn.net/kirito9943/article/details/81450619