#include <iostream>
#include <cstdio>
#include <math.h>
#include <stdlib.h>
#include <memory.h>
#include <algorithm>
using namespace std;
#define MAXVER 1005
#define INF 100000000
int n, m, e;
int a[MAXVER][MAXVER];
int dis[MAXVER];
bool visited[MAXVER];
void dijkstra(int src)
{
memset(visited, 0, sizeof(visited));
for (int i = 1; i <= n; i++)
{
dis[i] = a[src][i];
}
dis[src] = 0;
visited[src] = true;
for (int i = 1; i < n; i++)
{
int indexOfmin=src;
int tmp = INF;
for (int j = 1; j <= n; j++)
{
if (visited[j]) continue;
if (tmp > dis[j])
{
tmp = dis[j];
indexOfmin = j;
}
}
visited[indexOfmin] = true;
for (int j = 1; j <= n; j++)
{
if (!visited[j] && dis[j]>dis[indexOfmin] + a[indexOfmin][j])
{
dis[j] = dis[indexOfmin] + a[indexOfmin][j];
}
}
}
}
int main()
{
int T;
cin >> T;
while (T--)
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
a[i][j] = INF;
a[i][i] = 0;
}
}
for (int i = 0; i < m; i++)
{
int u, v, w;
cin >> u >> v >> w;
a[u][v] = min(a[u][v], w);
//cout << a[u][v] << endl;
}
dijkstra(1);
for (int i = 1; i <= n;i++)
cout << dis[i] << endl;
}
return 0;
}
Dijkstra学习
最新推荐文章于 2024-04-12 15:55:24 发布