zoukankan      html  css  js  c++  java
  • 【最短路】 poj 2387

    #include <iostream>
    #include <stdlib.h>
    #include <limits.h>
    #include <string.h>
    using namespace std;
    int map[1010][1010];
    int dis[1010];
    int n,pos,sum;
    void init()
    {
     for(int i=0; i<1001; i++)
     {
      for(int k=0; k<1001; k++)
       map[i][k] = INT_MAX;
      map[i][i] = 0;
     }
     for(int i=0; i<1001; i++)
      dis[i] = INT_MAX;
     sum = 0;
    }
    void Dijkstra()
    {
     int used[1010];
     memset(used,0,sizeof(used));
     int now = pos;
     dis[now] = 0; used[now] = 1;
     for(int i=0; i<n; i++)
     {
      for(int k=1; k<=n; k++)
       if( map[now][k] != INT_MAX && dis[now] + map[now][k] < dis[k] )
        dis[k] = dis[now] + map[now][k];
      int min = INT_MAX;
      for(int k=1; k<=n; k++)
       if( dis[k] < min && !used[k] )
        min = dis[now = k];
      used[now] = 1;
     }
    }
    int main()
    {
     int from,to,len,t;
     init();
     cin >> t >> n;
     pos = n;
     for(int i=1; i<=t; i++)
     {
      cin >> from >> to >> len;
      if( len < map[from][to] )
       map[from][to] = map[to][from] = len;
     }
     Dijkstra();
     cout << dis[1] << endl;
    return 0;
    }
     
     
     
    #include<iostream>
    using namespace std;
    #define MAX 1005
    const int oo=10000000;
    int dist[MAX][MAX];
    int close[MAX];
    bool used[MAX];
    int main()
    {
        int N,T,i,j;
        int s,e,len;
        scanf("%d%d",&T,&N);
        memset(dist,0x7f,sizeof(dist));
        memset(used,false,sizeof(used));
        memset(close,0x7f,sizeof(close));
        for(i=1;i<=T;i++)
        {
            scanf("%d%d%d",&s,&e,&len);
            if(dist[s][e]>len)
                dist[s][e]=dist[e][s]=len;
        }
        for(i=2;i<=N;i++)
        {
            close[i]=dist[1][i];
        }
        used[1]=true;
        for(i=2;i<=N;i++)
        {
            int min=0;int mlen=oo;
            for(j=2;j<=N;j++)
            {
                if(!used[j]&&close[j]<mlen)
                {
                    min=j,mlen=close[j];
                }
            }
            used[min]=true;
            for(j=2;j<=N;j++)
            {
                if(!used[j]&&dist[min][j]<oo)
                {
                    int temp=dist[min][j]+close[min];
                    if(temp<close[j])
                        close[j]=temp;
                }
            }
        }
        printf("%d
    ",close[N]);
        return 0;
    }
  • 相关阅读:
    BUPT复试专题—最长连续等差子数列(2014软院)
    BUPT复试专题—奇偶求和(2014软件)
    BUPT复试专题—网络传输(2014网研)
    Hopscotch(POJ 3050 DFS)
    Backward Digit Sums(POJ 3187)
    Smallest Difference(POJ 2718)
    Meteor Shower(POJ 3669)
    Red and Black(poj 1979 bfs)
    测试
    Equations(hdu 1496 二分查找+各种剪枝)
  • 原文地址:https://www.cnblogs.com/balfish/p/4015109.html
Copyright © 2011-2022 走看看