• 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 }
  • 相关阅读:
    CefSharp-基于C#的客户端开发框架技术栈开发全记录
    C#中HttpWebRequest、WebClient、HttpClient的使用详解
    蜘蛛侠网站-关注C#爬虫技术
    网络剪刀-NetCut
    JSON.stringify 格式化输出字符串
    Vue 3.0 provide 传值到子组件
    全局添加可执行的node脚本
    npm link
    低代码平台思路
    java jwt使用,springboot 整合java-jwt,java jwt工具类
  • 原文地址:https://www.cnblogs.com/yangce/p/2936845.html
Copyright © 2020-2023  润新知