///dijstra,当模板背下来。
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<cstring>
#include<string>
#include<math.h>
#include<algorithm>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1000000007
#include<vector>
using namespace std;
const int maxn=1e3+5;
int w[maxn][maxn];
bool v[maxn];
int d[maxn],fa[maxn];///节点i到各个点的最近距离(节点是从1开始的);fa数组
int n=0,m=0;
void solve()
{
memset(v,false,sizeof(v));
for(int i=1;i<=n;i++)d[i]=(i==1?0:inf);///初始化
for(int i=1;i<=n;i++){///n个点的循环
int x,m=inf;
for(int y=1;y<=n;y++)if(!v[y]&&d[y]<m) m=d[x=y];///找到距离最小值。
v[x]=1;
for(int y=1;y<=n;y++){///更新
if(d[y]>(d[x]+w[x][y])){
d[y]=d[x]+w[x][y];
fa[y]=x;
}
}
}
}
int main()
{
int i=0,a=0,b=0,weight=0;
memset(w,inf,sizeof(w));
scanf("%d%d",&n,&m);
for(i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&weight);
w[a][b]=weight;
}
solve();
for(i=1;i<=n;i++){
printf("%d ",d[i]);
}
return 0;
}
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<cstring>
#include<string.h>
#include<math.h>
#include<algorithm>
#include <queue>
#define inf 0x3f3f3f3f
#define LL long long
using namespace std;
const int maxn=1e3+5;
struct Node{
int x,d;
};
vector<Node> Eg[maxn];
int Dist[maxn],N=0,Arr[maxn][maxn];
bool operator<(Node x, Node y) //重载了排序函数
{
return x.d<y.d;
}
void Dijkstra(int s)
{
int i=0;
for(i=0;i<=N;i++) Dist[i]=inf;
Dist[s]=0;
priority_queue<Node> Q;
Node temp1,temp2;
temp1.x=s, temp1.d= Dist[s];
Q.push(temp1);
while (!Q.empty()) {
temp1=Q.top(); Q.pop();
for(i=0; i<Eg[temp1.x].size();i++){
temp2=Eg[temp1.x][i]; //temp2是拿出来的,相当于d[y]
if(temp1.d+temp2.d < Dist[temp2.x]){
Dist[temp2.x] =temp1.d +temp2.d;
temp2.d= Dist[temp2.x];
Q.push(temp2);
}
}
}
}
int main()
{
int i=0,j=0,T=0,a=0,b=0,w=0;
Node t1, t2;
memset(Arr, inf, sizeof(Arr));
scanf("%d %d",&T,&N);
for(i=0;i<=N;i++) Eg[i].clear();
for(i=0;i<T;i++){
scanf("%d %d %d",&a, &b, &w);
if(w<Arr[a][b]) Arr[a][b]=Arr[b][a]=w;
}
/*
for(i=0;i<=N;i++){
for(j=0;j<=N;j++){
cout<<Arr[i][j]<<" ";
}
cout<<endl;
}
*/
for(i=1;i<=N;i++){
for(j=1;j<i;j++){
if(Arr[i][j]<inf){
t1.x=j; t1.d=Arr[i][j];
Eg[i].push_back(t1);
t2.x=i; t2.d=Arr[i][j];
Eg[j].push_back(t2);
}
}
}
Dijkstra(1);
printf("%d\n",Dist[N]);
return 0;
}