• uva 125(变形floyd)


    题意:这道题主要给你一张图,然后让你输出一个矩阵,表示从i->j有多少种路径数, 若是有无限种边输出-1。

    思路:用floyd算法在求解的时候稍微改装一下Map[i][j] +=Map[i][k]*Map[k][j]在最后求出来的时候,看一下Map[i]][i]是不是为零。若不是这说明这一点在环上那经过这一点的所有路径就是无限长的。

    这样的话就把所有经过i的点更新一下就行了。

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 #include <queue>
     7 #include <stack>
     8 #include <vector>
     9 #include <utility>
    10 #define LEN 1010
    11 #define INF 500001
    12 #define ll long long
    13 
    14 using namespace std;
    15 
    16 int Map[LEN][LEN], n, cnt = 0;
    17 
    18 void floyd()
    19 {
    20     for(int k=0; k<n; k++){
    21         for(int i=0; i<n; i++){
    22             for(int j=0; j<n; j++){
    23                 Map[i][j] += Map[i][k]*Map[k][j];
    24             }
    25         }
    26     }
    27     for(int k=0; k<n; k++){
    28         if(Map[k][k]){
    29             for(int i=0; i<n; i++){
    30                 for(int j=0; j<n; j++){
    31                     if(Map[i][k] && Map[k][j])Map[i][j] = -1;
    32                 }
    33             }
    34         }
    35     }
    36 }
    37 
    38 int main()
    39 {
    40 //    freopen("in.txt", "r", stdin);
    41 
    42     int dn;
    43     while(scanf("%d", &dn)!=EOF){
    44         memset(Map, 0, sizeof Map);
    45         n = 0;
    46         for(int i=0; i<dn; i++){
    47             int a, b;
    48             scanf("%d%d", &a, &b);
    49             Map[a][b] = 1;
    50             n = max(n ,max(a, b));
    51         }
    52         n++;
    53         floyd();
    54         printf("matrix for city %d
    ", cnt++);
    55         for(int i=0; i<n; i++){
    56             for(int j=0; j<n; j++){
    57                 printf("%d", Map[i][j]);
    58                 if(j!=n-1)printf(" ");
    59             }
    60             printf("
    ");
    61         }
    62     }
    63     return 0;
    64 }
    View Code
    奔跑吧!少年!趁着你还年轻
  • 相关阅读:
    1、Python的初识与简介
    解密解密
    python看是32位还是64
    linux实战一段,安装python3(centos)
    前段技巧
    django后端safe和前端safe的方法
    测试
    python小知识整理
    ajax格式
    111
  • 原文地址:https://www.cnblogs.com/shu-xiaohao/p/3470838.html
Copyright © 2020-2023  润新知