今日在华农终于接近完成阅读算法笔记,有点点成就感,做下dijkstra跟DFS算法结合的笔记
简单状态:纯dijkstra:
#include<iostream>
#include<algorithm>
#include<vector>
#define inf 1000000000
using namespace std;
const int maxn=1010;
int d[maxn];
bool vis[maxn]={false};
int G[maxn][maxn];
void dijkstra(int s){
fill(d,d+maxn,inf);
d[s]=0;
for(int i=0;i<n;i++){
int u=-1,min=inf;
for(int j=0;j<n;j++){
if(vis[j]==false&&d[j]<min){
u=j;
min=d[j];
}
}
if(u==-1) return;//找不s的最近的点
vis[u]=true;
for(int v=0;v<n;v++){
if(vis[v]==false&&d[u]+G[u][v]<d[v]&&G[u][v]!=inf){
d[v]=d[u]+G[u][v];
}
}
}
}
只需dijkstra(s);
打印路径且有第二标尺:dijkstra:
#include<iostream