UVa125 - Numbering Paths

2024-01-28 06:58
文章标签 paths uva125 numbering

本文主要是介绍UVa125 - Numbering Paths,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        题意:一个有向图,统计每对顶点间有多少条路径,如果有无数条(路径中有环),用-1表示。

        思路:Floyd算法变形。是这样的,假设i和j是两个顶点,它们之间的一条完整的路,除了i到j直连,路径中序号最大的顶点可以是k(k=0,1,2,3......)。用ans[i][j]表示i和j之间路径的数目,那么路径中最大序号顶点为k的那一类路径的数目为ans[i][k]*ans[k][j],循环统计一次就好了。

        还有个问题,如果有无数条路径,需要检测出来。我的方法是重新循环一遍,当ans[k][k]不为0时,说明遇到了环,作相应的处理就好了。

#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <memory.h>
#include <vector>
#include <queue>
#include <stack>
#include <ctype.h>
#define INF 1000000000
using namespace std;int ans[50][50];
int main(){int n;int count=0;while(cin>>n){memset(ans,0,sizeof(ans));int u,v;int maxspe=0;for(int i=1;i<=n;i++){scanf("%d%d",&u,&v);if(u>maxspe)maxspe=u;if(v>maxspe)maxspe=v;ans[u][v]++;}//for(int k=0;k<=maxspe;k++){for(int i=0;i<=maxspe;i++){if(i==k)continue;for(int j=0;j<=maxspe;j++){if(j==k)continue;ans[i][j]+=ans[i][k]*ans[k][j];}}}for(int k=0;k<=maxspe;k++){for(int i=0;i<=maxspe;i++){for(int j=0;j<=maxspe;j++){if(ans[k][k]&&ans[i][k]&&ans[k][j])ans[i][j]=-1;}}}printf("matrix for city %d\n",count);count++;for(int i=0;i<=maxspe;i++){for(int j=0;j<=maxspe;j++){cout<<ans[i][j];if(j!=maxspe)cout<<" ";}cout<<endl;}}return 0;
}


这篇关于UVa125 - Numbering Paths的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652832

相关文章

大数据Java基础-JAVA IO 9】java IO流 (九) Path、Paths、Files的使用

1.NIO的使用说明: >Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO AP。 >NIO与原来的IO同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。 >NIO将以更加高效的方式进行文件的读写操作。 >随着 JDK 7 的发布,Java对N

LeetCode 63 Unique Paths II

题意: 给出一个带有障碍物的棋盘,每次行动向下或向右移动一格,求从左上角到右下角有几种方案。 思路: 简单dp题,假设dp[i][j]表示第i行第j列的方案数,那么状态转移方程就为 dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 。 注意下边界条件就好了,而且对于障碍物,直接把dp清零即可。 可以发现这个dp只和当前行和上一行有关,进而做空间优化,用一

LeetCode 62 Unique Paths

题意: 一个n*m的棋盘,每次行动只能向下或者向右走1格,求从左上角走到右下角有几种不同的方案数。 思路: 因为行动只能向下向右,所以总步数是一定的,即n - m + 2步。那么问题就变成了这里面的哪几步是向下的,就是组合数了,即从n - m + 2个中选n - 1个的组合数。 题目里说的n和m值太夸张了,因为他的函数返回int……所以肯定很小。 代码: class S

【Redundant Paths】【无向图】【双连通分量】【缩点】

Redundant Paths Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  Status In order to get from one of the  F(1≤F≤5,000)  grazing fields (which a

Java 输入与输出之 NIO.2【AIO】【Path、Paths、Files】【walkFileTree接口】探索之【三】

在JDK 1.7 版本中对NIO进行了完善,推出了NIO.2,也称为AIO(异步IO),在处理大量并发请求时具有优势,特别是在网络编程和高并发场景下,表现得更为出色。 对于输出流和输入流而言,操作的对象可以是文件,大多数情况下是文件,也可以是网络连接,当然也可以是内存数据。我们今天主要讨论的是文件和目录处理。 本博客我们将探讨NIO.2中最基础的Path、Paths和Files的用法。 Path

python动画:实现目标的运动轨迹【paths】

一,介绍 在 Manim 库中,“路径(paths)”指的是一些功能函数,这些函数用于确定在点集之间进行变换时所需的路径。这些函数为动画制作提供了灵活性和表现力,使得物体在场景中的移动表现得更加生动和自然。 具体来说,路径函数能够根据给定的一组点,生成一条连贯的运动轨迹,控制物体在动画中的运动方式。例如,当你想让一个图形从一个位置移动到另一个位置时,简单的线性运动可能显得乏味,而使用路径函数则

POJ 3177 Redundant Paths (双连通)

题目地址:POJ 3177 找出各个双连通分量度数为1的点,然后作为叶子节点,那么ans=(叶子结点数+1)/2。需要注意的是有重边。 代码如下: #include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#incl

UVA 12295 Optimal Symmetric Paths(spfa+记忆化)

题意: 求从左上角到右下角的最短路径数,且要求沿斜线对称 思路: 既然要求对称,所以我们将对称的权值叠加,那么就是求到对角线的最短路径了,通过dp解决方案数 // whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostream>

UVA125 - Numbering Paths(floyd)

UVA125 - Numbering Paths(floyd) UVA125 - Numbering Paths 题目大意:  给m条有方向的边,然后要求你给出N * N的矩阵,矩阵G【i】【j】代表的是i到j之间的总路径数,如果i到j之间存在着环,那么G【i】【j】 = -1. 解题思路:  i到j的路径数目等于i到k乘以k到j(经过k到达的话)。用floyd可以求出i到j之间的所有的