1 条题解

  • 0
    @ 2024-5-1 13:39:18
    #include <bits/stdc++.h>
    using namespace std;
    const int INF=0x3f3f3f3f;
    int n,m;
    struct egh{
    	int from,to,len,next;
    }a[100];
    int pre[20];
    int k;
    int s,t;
    int d[20];
    bool f[20];
    void add(int u,int v,int l){
    	a[++k]={u,v,l,pre[u]};
    	pre[u]=k;
    }
    void dijstra(){
    	memset(d,0x3f,sizeof(d));
    	d[s]=0;
    	for (int i=1;i<=n;i++){
    		int mi=-1;
    		for (int j=1;j<=n;j++){
    			if (!f[j]&&(mi==-1||d[mi]>d[j]))mi=j;
    		}
    		f[mi]=true;
    		for (int j=pre[mi];j!=0;j=a[j].next){
    			int to=a[j].to;
    			if (!f[to]&&d[mi]+a[j].len<d[to])d[to]=d[mi]+a[j].len;
    		}
    	}
    }
    int main(){
    	cin>>n>>m;
    	int x,y,l;
    	for (int i=1;i<=m;i++){
    		cin>>x>>y>>l;
    		add(x,y,l);
    		add(y,x,l);
    	}
    	cin>>s>>t;
    	dijstra();
    	if (d[t]==INF)cout<<"No path";
    	else cout<<d[t];
    	return 0;
    }
    
    • 1

    【入门】城市之间的最短路

    信息

    ID
    1040
    时间
    1000ms
    内存
    32MiB
    难度
    6
    标签
    递交数
    16
    已通过
    13
    上传者