这个是图片,理解一下
这个是Dijkstra的模板题,比较基础的题
Dijkstra我在之前也讲过了
见代码
#include<bits/stdc++.h> using namespace std; int t,c,ts,te,rs,re,ci; int f[2501][2501],a[2501][2501],dis[2501]; bool p[2501]; int main() { scanf("%d%d%d%d",&t,&c,&ts,&te); //输入 for(int i=1;i<=t;i++) for(int j=1; j<=t; j++) f[i][j]=1e9; for(int i=1; i<=t; i++) dis[i]=1e9; //初始化 for(int i=1;i<=c;i++) { scanf("%d%d%d",&rs,&re,&ci); f[rs][re]=f[re][rs]=ci; } dis[ts]=0; for(int i=1; i<=t; i++) { int k=0,minn=1e9; for(int j=1; j<=t; j++) { if(!p[j]&&minn>dis[j]) { k=j; minn=dis[j]; } } p[k]=true;//找那个中转站 for(int j=1; j<=t; j++) //举出终点
{ if(!p[j]&&dis[k]+f[k][j]<dis[j]) dis[j]=dis[k]+f[k][j];//对此进行比较 } } printf("%d ",dis[te]); return 0; }