zoukankan      html  css  js  c++  java
  • Tram POJ 1847

    http://acm.hust.edu.cn/vjudge/contest/121378#problem/N

    题意:一辆火车从某点A开向某点B,在这一路上,有很多的岔口,默认的是第一条岔口,若想改变岔口的方向,则可以通过开关来改变,问你到达最终地点B时,一共改变开关的次数为多少。

    **********单源求最短路问题(一开始写成双向的,我也是很无语很受伤啊)

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    #define maxn 110
    #define oo 0x3f3f3f3f
    int maps[maxn][maxn], v[maxn], dist[maxn];
    int n, a, b;
    
    void Init()
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                if(i==j) maps[i][j] = 0;
                else maps[i][j] = maps[j][i] = oo;
            }
        }
    }
    
    void Dij()
    {
        memset(v, 0, sizeof(v));
    
       for(int i=1; i<=n; i++)
        dist[i] = maps[a][i];
    
       v[a] = 1;
    
       for(int i=1; i<n; i++)
       {
           int index=-1, mins=oo;
    
           for(int j=1; j<=n; j++)
           {
               if(!v[j] && dist[j]<mins)
               {
                   index=j;
                   mins=dist[j];
               }
           }
    
           v[index] = 1;
    
           for(int j=1; j<=n; j++)
           {
               if(!v[j] && dist[j]>mins+maps[index][j])
                dist[j] = mins+maps[index][j];
           }
       }
    
       if(dist[b] == oo)
        printf("-1
    ");
       else
        printf("%d
    ", dist[b]);
    }
    
    int main()
    {
         int num, c;
    
         scanf("%d %d %d", &n, &a, &b);
    
         Init();
    
         for(int i=1; i<=n; i++)
         {
              scanf("%d", &num);
    
             for(int j=1;j<=num; j++)
              {
                  scanf("%d", &c);
    
                  int p = 1;
                  if(j == 1)
                    p = 0;
    
                maps[i][c] = min(p, maps[i][c]);
              }
         }
    
        Dij();
    
        return 0;
    }
    View Code
  • 相关阅读:
    守护线程与普通线程
    Java中实现多线程的两种方式之间的区别
    Python os.dup() 方法
    Python os.closerange() 方法
    Python os.close() 方法
    Python os.chroot() 方法
    Python os.chmod() 方法
    JavaScript——基本包装类型
    javascript——function类型(this关键字)
    常用的正则
  • 原文地址:https://www.cnblogs.com/daydayupacm/p/5700128.html
Copyright © 2011-2022 走看看