未经优化的迪杰斯特拉算法
时间复杂度O(n²)
空间复杂度O(n²)
适合处理小规模数据,但无法解决负边权问题
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
#define MAX 0x3f3f3f3f
#define N 1005
bool flag[N];
int n, m;
int a[N][N],dst[N];
void dijkstra()
{
int tmp = 1,ne=1,MIN = MAX;
dst[tmp] = 0;
flag[tmp] = true;
for (int i = 1; i <= n-1; i++)
{
MIN = MAX;
flag[tmp] = true;
for (int j = 1; j <= n; j++)
{
dst[j] = min(a[tmp][j]+dst[tmp], dst[j]);
}
for (int j = 1; j <= n; j++)
{
if (!flag[j] && dst[j] < MIN)
{
ne = j;
MIN = dst[j];
}
}
tmp = ne;
}
}
int main()
{
int num1, num2, num3;
scanf("%d %d", &n, &m);
memset(a, 0x3f, sizeof a);
memset(dst, 0x3f, sizeof dst);
for (int i = 0; i < m; i++)
{
scanf("%d %d %d", &num1, &num2,&num3);
if(num3<a[num1][num2])
a[num1][num2] = num3;
}
dijkstra();
if (dst[n] == MAX) printf("-1");
else printf("%d", dst[n]);
return 0;
}