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 }
  • 相关阅读:
    Windows 10下CUDA及cuDNN的安装 —— Pytorch
    Centos7 python3环境搭建 兼容python2.7
    VMware中Linux虚拟机与Windows主机共享文件夹
    基于阿里云服务器的网站搭建 新手教程
    CVE-2017-11882 漏洞分析总结 新手漏洞分析详细教程
    Linux基本命令 和 Regex 正则表达式
    Shell 编程 基础用法
    Perl 编程 基础用法
    Python3 网络通信 网络聊天室 文件传输
    Ant Design of Angular
  • 原文地址:https://www.cnblogs.com/yangce/p/2936845.html
Copyright © 2011-2022 走看看