hdu 1625(floyd判环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1625、
思路:大牛说是floyd判环,一想确实如此,我还一直在想如果用记忆化的怎么处理环呢...orz....
首先通过Floyd预处理,把所有的路径数求出来,即d[i][j] += d[i][k] * d[k][j]。然后确定有无环,如果存在环的话,即d[k][k] != 0(存在环),那么所有的点i,j,只要经过了k(i->k->j),那么它的路径数是不能确定的,反之,确定。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define MAXN 55 6 int path[MAXN][MAXN]; 7 int m,n; 8 9 void floyd(){ 10 for(int k=0;k<=n;k++){ 11 for(int i=0;i<=n;i++){ 12 for(int j=0;j<=n;j++){ 13 path[i][j]+=path[i][k]*path[k][j]; 14 } 15 } 16 } 17 for(int i=0;i<=n;i++)if(path[i][i]){ 18 path[i][i]=-1; 19 for(int j=0;j<=n;j++){ 20 for(int k=0;k<=n;k++){ 21 if(path[j][i]&&path[i][k]){ 22 path[j][k]=-1; 23 } 24 } 25 } 26 } 27 } 28 29 int main(){ 30 int u,v,t=0; 31 while(~scanf("%d",&m)){ 32 memset(path,0,sizeof(path)); 33 n=0; 34 for(int i=1;i<=m;i++){ 35 scanf("%d%d",&u,&v); 36 path[u][v]=1; 37 n=max(n,max(u,v)); 38 } 39 printf("matrix for city %d\n",t++); 40 floyd(); 41 for(int i=0;i<=n;i++){ 42 for(int j=0;j<n;j++){ 43 printf(" %d",path[i][j]); 44 } 45 printf(" %d\n",path[i][n]); 46 } 47 } 48 return 0; 49 }
hdu 1625(floyd判环)相关推荐
- floyd判环算法(龟兔赛跑算法)
floyd判环算法(龟兔赛跑算法) 注意,这个算法是用来判断一条链+一条环的图,环的长度或者环与链的交界处的,所以此floyd非彼floyd(虽然都是一个人想出来的). (图不是我的) 如果只要求环的 ...
- Algorithm Set:floyd判环法
目录 1.1 适用情况 1.2 复杂度 1.3 判断是否存在环 1.4 找到环的入口 1.5 代码实现 1.1 适用情况 该算法用于解决一个数组/链表中是否存在环的情况! 1.2 复杂度 时间复杂度: ...
- hdu 3560(dfs判环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3560 思路:dfs判环,这里成环的条件是环中的每个点的出度和入度都为1,因此dfs的时候只须判断的相连 ...
- HDU 1217 Arbitrage (Floyd + SPFA判环)
题目链接:HDU 1217 Arbitrage 简单的货币转换问题,给定多种货币,以及货币之间的汇率,问能否通过货币的转换实现收益. 例如: 1 US Dollar buys 0.5 British ...
- 如何判断链表中是否存在环?Floyd判圈算法 leetcode刷题笔记 142. 环形链表 II
这道题使用了floyd判圈算法,所以先讲解floyd算法的原理和实现,最后在附加上第142题的代码. floyd算法: 一.用途: 可以在有限状态机.迭代函数或者链表上判断是否存在环,求出该环的起点与 ...
- Ice_cream's world I HDU - 2120(并查集判环)
题意:问给出的望塔之间的建造了围墙,将土地分成了几份 思路:用并查集判环,若有围墙相接的瞭望塔,有相同的父根,则存在环 ice_cream's world is a rich country, it ...
- leetcode202(Floyd判圈算法(龟兔赛跑算法))
Write an algorithm to determine if a number is "happy". 写出一个算法确定一个数是不是快乐数. A happy number ...
- Floyd判圈算法(Floyd's cycle detection
Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm).该算法由美国科学家罗伯特·弗洛伊德发明 ...
- Calculator Conundrum UVA - 11549(floyd判圈)
Calculator Conundrum UVA - 11549 题意: 给你一个n和k. 每次操作可以把k平方,之后取k*k的前n位 为 k. 思路: 首先可以想到,经过有限次操作后,会出现循环. ...
最新文章
- 用一个创业故事串起操作系统原理(一)
- java远程调用linux的命令或者脚本
- 蓝桥杯第八届省赛JAVA真题----包子凑数
- ffmpeg播放器 android,Android使用FFmpeg(六)--ffmpeg实现音视频同步播放
- 【点阵液晶编程连载一】写在前面
- myeclipse从svn检出代码转成maven后格式有误解决方法
- 原生JS实现各种经典网页特效——Banner图滚动、选项卡切换、广告弹窗等
- vue 使用html自带title属性 鼠标悬浮展示内容 修改其样式
- 新唐MCU之UART软硬件调试过程记录及总结
- 生成均匀分布次序统计量的伪随机数 生成删失伪随机样本
- 1183 连接字符串
- 灯管实验的em算法_【大学物理实验】日光灯电路的组装及参数测量.ppt
- Robot Framework+Autoit 安装教程
- php微信里面换行符,如何在字符串中间加换行符js微信小程序实现人脸识别
- 内网计算机安全使用规则,局域网网络安全注意事项
- python函数map和split函数
- Linux的一些快捷键
- 小米手机应用ICON角标Badger显示
- 系统部署服务器位置,室内定位系统在实际项目中的部署
- C#添加WebService服务实现天气预报