题意:求开始到最后的最短路
思路:dijkstra算法
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 2020
#define INF 9999999
using namespace std;
int N,T;
int map[MAXN][MAXN];
bool vis[MAXN];
int d[MAXN];
void dijkstra(int s)
{
for(int i = 1; i <= N; i++)
{
d[i] = map[s][i];
}
vis[s] = 1;
for(int i = 1; i <= N-1; i ++)
{
int now,mixn = INF;
for(int j = 1; j <= N; j++)
{
if(d[j] < mixn && (!vis[j]))
{
mixn = d[j];
now = j;
}
}
vis[now] = 1;
for(int k = 1; k <= N; k ++)
{
if(!vis[k] && d[k] > d[now] + map[now][k])
d[k] = d[now] + map[now][k];
}
}
}
int main()
{
int x,y,w;
scanf("%d%d",&T,&N);
memset(map,INF,sizeof(map));
memset(vis,0,sizeof(vis));
while(T -- )
{
scanf("%d%d%d",&x,&y,&w);
if(w < map[x][y])
{
map[x][y] = w;
map[y][x] = w;
}
}
dijkstra(1);
printf("%d\n",d[N]);
return 0;
}