Til the Cows Come Home
dij算法,问1到N的最短路
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <stack> #include <list> using namespace std; const int maxn = 4005; const int oo = 1e9; int Map[maxn][maxn]; void Init(int n) { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(i==j) Map[i][j] = 0; else Map[i][j] = oo; } } } int dist[maxn]; int visit[maxn]; int dij(int n) { for(int i=1; i<=n; i++) { dist[i] = Map[1][i]; visit[i] = 0; } visit[1] = 1; dist[1] = 0; for(int i=1; i<=n; i++) { int Min = oo; int index; for(int j=1; j<=n; j++) { if(!visit[j]&&dist[j]<Min) { Min = dist[j]; index = j; } } visit[index] = 1; for(int j=1; j<=n; j++) { if(!visit[j]&&dist[j]>Min+Map[index][j]) { dist[j] = Min+Map[index][j]; } } } return dist[n]; } int main() { int n, m; while(~scanf("%d%d",&m,&n)) { Init(n); int a,b,c; for(int i=1; i<=m; i++) { scanf("%d %d %d",&a, &b, &c); Map[a][b] = min(c,Map[a][b]); Map[b][a] = min(c,Map[a][b]); } int ans = dij(n); printf("%d\n", ans); } return 0; }