til the cows come home (dij)

题目:

https://vjudge.net/problem/POJ-2387

思路:

输入的两个点之间可能右多个长度,留下最小的

#include<stdio.h>
#include<string.h>
const int maxn=1003;
const int maxm=2003;
const int inf=0x3f3f3f3f;
int dis[maxn],v[maxn],a[maxn][maxn];
  int t,n;
void dij()
{
  v[1]=1;
  for(int i=1;i<=n;i++)
  {
      if(i==1)
        dis[i]=0;
      else
        dis[i]=a[1][i];
  }
  for(int i=1;i<n;i++)
  {
      int p=1;
      int mm=inf;
      for(int j=1;j<=n;j++)
      {
          if(!v[j]&&dis[j]<mm)
          {
              mm=dis[j];
              p=j;
          }
      }
      v[p]=1;
      for(int j=1;j<=n;j++)
      {
          if(!v[j]&&dis[p]+a[p][j]<dis[j])
            dis[j]=dis[p]+a[p][j];
      }
  }
  printf("%d\n",dis[n]);
}
int main()
{

    memset(a,0x3f,sizeof(a));

    scanf("%d %d",&t,&n);
    int u,v,w;
    while(t--)
    {
        scanf("%d %d %d",&u,&v,&w);
        if(w<a[u][v])
        {
                  a[u][v]=w;
        a[v][u]=w;

        }

    } dij();

}

 

posted @ 2021-07-07 15:14  废柴废柴少女  阅读(50)  评论(0)    收藏  举报