1 条题解

  • 0
    @ 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
    上传者