最短路径:初涉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