zoukankan      html  css  js  c++  java
  • POJ 3268 Silver Cow Party

    http://poj.org/problem?id=3268

    不知道怎么回事,问题感觉今天读不懂题..题目要求求有向图中,除X外其余所有点到X的最短往返路径中,最长的那一个.FLOYD算法可以很容易的求出有向图中任意两点的最短路径,但是此题用FLOYD会超时.先用一次Dijkstra,求出从X到其余所有点的最短路径(这相当于回来时的长度),然后将这些路径记录,再将邻接矩阵转置,再用一次Dijkstra,将两次路径相加,找出最大的就可以了

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #define INF 0x0fffffff
     4 int M,N,X;
     5 int mat[1005][1005];
     6 int nearest_array[1005];
     7 int final[1005];
     8 void dijkstra()
     9 {
    10     bool visited[1002]={false};
    11     int min=-1*INF;
    12     int pos;
    13     int i,j;
    14     for(i=1;i<=N;i++)
    15         nearest_array[i]=mat[X][i];
    16     visited[X]=true;
    17     nearest_array[X]=0;
    18     for(i=1;i<N;i++) {
    19         min=INF;
    20         pos=0;
    21         for(j=1;j<=N;j++) {
    22             if(!visited[j]&&nearest_array[j]<min) {
    23                 min=nearest_array[j];
    24                 pos=j;
    25             }
    26         }
    27         visited[pos]=true;
    28         for(j=1;j<=N;j++) {
    29             if(!visited[j]&&nearest_array[j]>min+mat[pos][j])
    30                 nearest_array[j]=min+mat[pos][j];
    31         }
    32     }
    33 }
    34 
    35 void init()
    36 {
    37     int i,j;
    38     for(i=1;i<=N;i++)
    39         for(j=1;j<=N;j++)
    40             mat[i][j]=INF;
    41 }
    42 void roate()
    43 {
    44     int i,j,temp;
    45     for(i=1;i<=N;i++)
    46         for(j=1;j<i;j++) {
    47             temp=mat[i][j];
    48             mat[i][j]=mat[j][i];
    49             mat[j][i]=temp;
    50         }
    51 }
    52 void check_mat()
    53 {
    54     int i,j;
    55     for(i=1;i<=N;i++) {
    56         printf("\n");
    57         for(j=1;j<=N;j++)
    58             printf("%10d ",mat[i][j]);
    59     }
    60 }
    61 int main()
    62 {
    63     while(scanf("%d%d%d",&N,&M,&X)!=EOF) {
    64         int i,j,a,b,temp;
    65         init();
    66         for(i=1;i<=M;i++) {
    67             scanf("%d%d%d",&a,&b,&temp);
    68             mat[a][b]=temp;
    69         }
    70         /*check_mat();*/
    71         dijkstra();
    72         for(i=1;i<=N;i++)
    73             final[i]=nearest_array[i];
    74         roate();
    75         dijkstra();
    76         int max_time=0;
    77         for(i=1;i<=N;i++) 
    78             if(max_time<final[i]+nearest_array[i])
    79                 max_time=final[i]+nearest_array[i];
    80         printf("%d\n",max_time);
    81     }
    82     return 0;
    83 }
  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/yangce/p/2936845.html
Copyright © 2011-2022 走看看