最短路径——Dijkstra算法简单实现
#include <bits/stdc++.h>
#define maxn 100001
using namespace std;
int e[101][101];
bool book[101];
int dis[101];
int n,m,inf=65535;
void init(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)
e[i][j]=0;
else
e[i][j]=inf;
}
int Dijkstra(int first,int end){
for(int i=1;i<=n;i++){
dis[i]=e[first][i];
book[i]=0;
}
book[first]=1;
for(int i=1;i<=n-1;i++){
int minn=inf,u;
for(int j=1;j<=n;j++){
if(book[j]==false&&dis[j]<minn){
minn=dis[j];
u=j;
}
}
book[u]=true;
for(int j=1;j<=n;j++){
if(e[u][j]<inf)
if(dis[j]>dis[u]+e[u][j])
dis[j]=dis[u]+e[u][j];
}
}
return dis[end];
}
int main() {
cin>>n>>m;
init();
for(int i=0;i<m;i++){
int x,y,z;
cin>>x>>y>>z;
e[x][y]=z;
}
int s=Dijkstra(1,5);
cout<<s;
return 0;
}