Dijkstra 复习

Dijkstra 算法不仅是求图中最短路径的O(N²)算法

在关于图的动态规划中可以将题目转换为图,再用该算法进行DP

代码如下

#include<iostream>  // made by Huing
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int c[10001],f[1001][1001],n,m,s,t;
bool exist[10001],b[10001];
void Dijkstra(int s)
{
 memset(b,false,sizeof(b));
 b[s]=true;
 c[s]=0;
 for (int i=1;i<=n;i++) c[i]=f[s][i];//初始化
 
 for (int i=1;i<+n-1;i++)

 {
  int k=0,minl=1e30;
  for (int j=1;j<=n;j++)
  if(!b[j]&&c[j]<minl){
   k=j;minl=c[j];
  }
  if(k==0) break;
  b[k]=true;
  for (int j=1;j<=n;j++)
  c[j]=min(c[j],c[k]+f[k][j]); 
 }
 cout<<c[t];
}
int main()
{
 cin>>n>>s>>t;                //求s到t的最短路径


 memset(f,-0x7fffffff/3,sizeof(f));
    for (int i=1;i<=n;i++)
 for (int j=1;j<=n;j++)
 cin>>f[i][j];
 Dijkstra(s);
}

原文地址:https://www.cnblogs.com/ffhy/p/5658223.html