最短路径:初涉Dijkstra算法

模板题目:https://www.luogu.com.cn/problem/P1339

我的代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #define INF 0x3f3f3f3f;
 5 using namespace std;
 6 int n,m,s,t;
 7 int w[2505][2505];//初始化为INF
 8 int d[2505];
 9 int vis[2505];
10 
11 int main()
12 {
13     freopen("input.txt","r",stdin);
14     cin>>n>>m>>s>>t;
15     memset(vis,0,sizeof(vis));
16     for(int i=0;i<n;i++) d[i]=(i==s-1)?0:INF;//0赋值给起点
17     for(int i=0;i<n;i++) for(int k=0;k<n;k++) w[i][k]=INF;
18     //
19     int a,b,p;
20     for(int i=0;i<m;i++)
21     {
22         cin>>a>>b>>p;
23         a--;b--;//由于输入文件里是[1,n],而模板中是[0,n)所以找了好久才发现
24         if(w[a][b]>p){w[b][a]=w[a][b]=p;}
25     }
26     //
27     for(int i=0;i<n;i++)
28     {
29         int x,m=INF;
30         for(int y=0;y<n;y++)if(!vis[y]&&d[y]<=m)m=d[x=y];
31         vis[x]=1;
32         for(int y=0;y<n;y++)d[y]=min(d[y],d[x]+w[x][y]);
33     }
34     printf("%d\n",d[t-1]);
35     return 0;
36 }

其他博主的文章:

https://blog.csdn.net/m0_38004914/article/details/81209125

https://blog.csdn.net/kprogram/article/details/81225176

OK

上一篇:P2505 [HAOI2012]道路


下一篇:GYM 101933K(二项式反演、排列组合)