1 条题解
-
0117爱好者 (mengqingyu) LV 10 @ 2024-7-27 16:02:39
#include<bits/stdc++.h> using namespace std; int t,n; bool vis[1001]; int dis[1001],g[1001][1001]; void Dijkstra() { for(int i=1;i<=n;i++) dis[i]=g[1][i];//dis的初始化 dis[1]=0,vis[1]=true;//立个flag int min,u;//表示未被访问的点 for(int i=1;i<n;i++) { min=0x3f3f3f3f,u=0; for(int p=1;p<=n;p++) if(!vis[p]&&min>dis[p])//如果当前找的点未被访问且比上次找的最短路小,更新 u=p,min=dis[p]; if(!u)//如果未访问就更新 break; vis[u]=true;//标记当前的点为true for(int v=1;v<=n;v++) if(u!=v&&dis[v]>dis[u]+g[u][v]) dis[v]=dis[u]+g[u][v];//更新 } } int main() { memset(g,0x7f,sizeof(g)); //用memset函数 scanf("%d%d",&t,&n); for (int u,v,w,i=1;i<=t;++i) { scanf("%d%d%d",&u,&v,&w); g[u][v]=g[v][u]=min(w,g[u][v]); } Dijkstra(); printf("%d",dis[n]); return 0; }
- 1
信息
- ID
- 2784
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 2
- 上传者