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]);
}