• POJ 1734 Sightseeing trip(无向图最小环+输出路径)


    题目链接

     1 #include <cstdio>
     2 #include <string>
     3 #include <cstring>
     4 #include <queue>
     5 #include <map>
     6 #include <algorithm>
     7 using namespace std;
     8 #define LL __int64
     9 #define MOD 1000000007
    10 #define INF 0xffffff
    11 int dp[101][101],g[101][101],pre[101][101];
    12 int ans[1001];
    13 int main()
    14 {
    15     int n,m,minz,i,j,k,sv,ev,w,num,temp;
    16     while(scanf("%d%d",&n,&m)!=EOF)
    17     {
    18         memset(pre,-1,sizeof(pre));
    19         for(i = 1; i <= n; i ++)
    20         {
    21             for(j = 1; j <= n; j ++)
    22                 dp[i][j] = g[i][j] = INF;
    23             dp[i][i] = g[i][i] = 0;
    24         }
    25         for(i = 1; i <= m; i ++)
    26         {
    27             scanf("%d%d%d",&sv,&ev,&w);
    28             g[sv][ev] = dp[sv][ev] = min(dp[sv][ev],w);
    29             g[ev][sv] = dp[ev][sv] = min(dp[ev][sv],w);
    30             pre[sv][ev] = ev;
    31             pre[ev][sv] = sv;
    32         }
    33         minz = INF;
    34         for(i = 1; i <= n; i ++)//求最小环
    35         {
    36             for(j = 1; j <= i-1; j ++)
    37                 for(k = j+1; k <= i-1; k ++)
    38                 {
    39                     if(minz > dp[j][k] + g[j][i] + g[i][k])
    40                     {
    41                         minz = dp[j][k] + g[j][i] + g[i][k];
    42                         num = 1;
    43                         ans[0] = i;
    44                         temp = j;
    45                         while(temp != -1)
    46                         {
    47                             ans[num++] = temp;
    48                             temp = pre[temp][k];
    49                         }
    50                     }
    51                 }
    52             for(j = 1; j <= n; j ++)
    53                 for(k = 1; k <= n; k ++)
    54                 {
    55                     if(dp[j][k] > dp[j][i] + dp[i][k])
    56                     {
    57                         dp[j][k] = dp[j][i] + dp[i][k];
    58                         pre[j][k] = pre[j][i];
    59                     }
    60                 }
    61         }
    62         if(minz == INF)
    63         printf("No solution.
    ");
    64         else
    65         {
    66             for(i = 0;i < num;i ++)
    67             {
    68                 if(i == 0)
    69                 printf("%d",ans[i]);
    70                 else
    71                 printf(" %d",ans[i]);
    72             }
    73         }
    74         printf("
    ");
    75     }
    76     return 0;
    77 }
  • 相关阅读:
    辗转相除法求最大公约数
    洛谷——P2615 神奇的幻方 【Noip2015 day1t1】
    二分图的一大泼基础题
    HDU——T 1150 Machine Schedule
    HDU——T 1068 Girls and Boys
    POJ——T 3020 Antenna Placement
    Web框架Django(二)
    February 25 2017 Week 8 Saturday
    February 24 2017 Week 8 Friday
    February 23 2017 Week 8 Thursday
  • 原文地址:https://www.cnblogs.com/naix-x/p/3247486.html
Copyright © 2020-2023  润新知