n个点,m条边,求1 - n 的距离
输入x y z,表示x到y的距离为z
输出1 - n的最短距离 不存在输出-1
#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
#define INF 0x3f3f3f3f
int dis[105];
int len[105][105];
int vis[105];
int n,m;
vector<int>edge[105];
struct Pair
{
int fi,se;
bool friend operator<(Pair a,Pair b)
{
return a.se>b.se;
}
}pr,ne;
void dijkstra()
{
memset(dis,INF,sizeof(dis));
memset(vis,0,sizeof(vis));
pr.fi=1;
pr.se=0;
priority_queue<Pair>q;
q.push(pr);
while(!q.empty())
{
pr=q.top();
q.pop();
if(vis[pr.fi])
continue;
vis[pr.fi]=1;
for(int i=0;i<edge[pr.fi].size();i++)
{
ne.fi=edge[pr.fi][i];
ne.se=pr.se+len[pr.fi][ne.fi];
if(ne.se<dis[ne.fi])
{
dis[ne.fi]=ne.se;
q.push(ne);
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
memset(len,-1,sizeof(len));
for(int i=0;i<m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
edge[x].push_back(y);
edge[y].push_back(x);
if(len[x][y]==-1)
len[y][x]=len[x][y]=z;
else
len[y][x]=len[x][y]=min(z,len[x][y]);
}
dijkstra();
printf("%d",dis[n]==INF?-1:dis[n]);
}