Dijkstra学习

来源:互联网 发布:高通网络解锁工具下载 编辑:程序博客网 时间:2024/06/10 01:17
#include <iostream>#include <cstdio>#include <math.h>#include <stdlib.h>#include <memory.h>#include <algorithm>using namespace std;#define MAXVER 1005#define INF 100000000int 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;}

0 0