zoukankan      html  css  js  c++  java
  • nefu-1297 表哥的旅行(最短路问题)

    题目链接:

    http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1197

    注意事项:

    1.初始数组长度为零

    2.同样路径可能花费不同的时间

    3.运用变形的Dijkstra算法

    代码思路:

    先初始化二维数组ecot再输入数据并更新二维数组e和最大的cot,接着输入能到达的点fly并把e[fly][0]e[0][fly]初始化为0,最后输入想要到达的f,然后运用Dijkstra算法得出到达各点的最短路数组,最后找出最短路数组的最小值ans。

    代码如下:

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstdio>
     4 #include <cstring>
     5 #define inf  1<<30
     6 using namespace std;
     7 
     8 int e[1205][1205];
     9 int a,b,t,n,m,l,cot,ans,fly[1205],f[1205],book[1205],dis[1205];
    10 int dsj()
    11 {
    12     int u,pos;
    13     memset(book,0,sizeof(book));
    14     book[0]=1;
    15     for(int i=0;i<=cot;i++)
    16     dis[i]=e[i][0];
    17     for(int i=1;i<=cot;i++)
    18     {
    19         pos=inf;
    20         for(int j=1;j<=cot;j++)
    21         {
    22             if(dis[j]<pos&&book[j]==0)
    23             {
    24                 pos=dis[j];u=j;
    25             }
    26         }
    27         book[u]=1;
    28         for(int v=1;v<=cot;v++)
    29         {
    30             if(!book[v]&&dis[v]>dis[u]+e[u][v])
    31             dis[v]=dis[u]+e[u][v];     
    32         }
    33     }
    34     return 0;
    35 }
    36 int main()
    37 {
    38     while(~scanf("%d%d%d",&n,&m,&l))
    39     {
    40         cot=0;
    41         for(int i=0;i<1111;i++)
    42         {
    43             for(int j=0;j<1111;j++)
    44             e[i][j]=inf;
    45             e[i][i]=0;
    46         }
    47         for(int i=0;i<n;i++)
    48         {
    49             scanf("%d%d%d",&a,&b,&t);
    50             if(t<e[a][b])
    51             e[a][b]=e[b][a]=t;
    52             if(cot<a||cot<b)
    53             cot=a>b?a:b;
    54         }
    55         for(int i=0;i<m;i++)
    56         {
    57             scanf("%d",&fly[i]);
    58             e[fly[i]][0]=e[0][fly[i]]=0;
    59         }
    60         for(int i=0;i<l;i++)
    61         scanf("%d",&f[i]);
    62         dsj();
    63         ans=inf;
    64         for(int i=0;i<l;i++)
    65         if(ans>dis[f[i]])
    66         ans=dis[f[i]];
    67         if(ans==inf)
    68         printf("NO
    ");
    69         else
    70         printf("%d
    ",ans);
    71     }
    72     return 0;
    73 }
    View Code
  • 相关阅读:
    Java Web 网络留言板2 JDBC数据源 (连接池技术)
    Java Web 网络留言板3 CommonsDbUtils
    Java Web ConnectionPool (连接池技术)
    Java Web 网络留言板
    Java Web JDBC数据源
    Java Web CommonsUtils (数据库连接方法)
    Servlet 起源
    Hibernate EntityManager
    Hibernate Annotation (Hibernate 注解)
    wpf控件设计时支持(1)
  • 原文地址:https://www.cnblogs.com/wang-ya-wei/p/5857759.html
Copyright © 2011-2022 走看看