问题:迪杰斯特拉算法求解单源最短路径
#include <iostream>
#include <algorithm>
using namespace std;
const int inf = 9999;
const int maxn = 510;
int n, m, s, d;
int graph[maxn][maxn];
int dis[maxn];
int visited[maxn];
void dijkstra()
{
dis[s] = 0;
for(int i = 0; i < n; i++)
{
int minn = inf, minid = -1;
for(int j = 0; j < n; j++)
{
if(visited[j] == false && dis[j] < minn)
{
minn = dis[j];
minid = j;
}
}
if(minid == -1) break;
visited[minid] = true;
for(int j = 0; j < n; j++)
{
if(visited[j] == false && graph[minid][j] != inf)
{
if(dis[minid] + graph[minid][j] < dis[j])
dis[j] = dis[minid] + graph[minid][j];
}
}
}
}
int main()
{
cin>>n>>m>>s>>d;
fill(graph[0], graph[0] + maxn*maxn, inf);
fill(dis, dis + maxn, inf);
for(int i = 0; i < m; i++)
{
int a, b, c;
cin>>a>>b>>c;
graph[a][b] = graph[b][a] = c;
}
dijkstra();
cout<<dis[d]<<endl;
}
/*
4 5 0 3
0 1 1
1 3 2
0 3 4
0 2 2
2 3 1
3
*/