题目链接: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),那么它的路径数是不能确定的,反之,确定。

View Code

 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判环)相关推荐

  1. floyd判环算法(龟兔赛跑算法)

    floyd判环算法(龟兔赛跑算法) 注意,这个算法是用来判断一条链+一条环的图,环的长度或者环与链的交界处的,所以此floyd非彼floyd(虽然都是一个人想出来的). (图不是我的) 如果只要求环的 ...

  2. Algorithm Set:floyd判环法

    目录 1.1 适用情况 1.2 复杂度 1.3 判断是否存在环 1.4 找到环的入口 1.5 代码实现 1.1 适用情况 该算法用于解决一个数组/链表中是否存在环的情况! 1.2 复杂度 时间复杂度: ...

  3. hdu 3560(dfs判环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3560 思路:dfs判环,这里成环的条件是环中的每个点的出度和入度都为1,因此dfs的时候只须判断的相连 ...

  4. HDU 1217 Arbitrage (Floyd + SPFA判环)

    题目链接:HDU 1217 Arbitrage 简单的货币转换问题,给定多种货币,以及货币之间的汇率,问能否通过货币的转换实现收益. 例如: 1 US Dollar buys 0.5 British ...

  5. 如何判断链表中是否存在环?Floyd判圈算法 leetcode刷题笔记 142. 环形链表 II

    这道题使用了floyd判圈算法,所以先讲解floyd算法的原理和实现,最后在附加上第142题的代码. floyd算法: 一.用途: 可以在有限状态机.迭代函数或者链表上判断是否存在环,求出该环的起点与 ...

  6. Ice_cream's world I HDU - 2120(并查集判环)

    题意:问给出的望塔之间的建造了围墙,将土地分成了几份 思路:用并查集判环,若有围墙相接的瞭望塔,有相同的父根,则存在环 ice_cream's world is a rich country, it ...

  7. leetcode202(Floyd判圈算法(龟兔赛跑算法))

    Write an algorithm to determine if a number is "happy". 写出一个算法确定一个数是不是快乐数. A happy number ...

  8. Floyd判圈算法(Floyd's cycle detection

    Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm).该算法由美国科学家罗伯特·弗洛伊德发明 ...

  9. Calculator Conundrum UVA - 11549(floyd判圈)

    Calculator Conundrum UVA - 11549 题意: 给你一个n和k. 每次操作可以把k平方,之后取k*k的前n位 为 k. 思路: 首先可以想到,经过有限次操作后,会出现循环. ...

最新文章

  1. 用一个创业故事串起操作系统原理(一)
  2. java远程调用linux的命令或者脚本
  3. 蓝桥杯第八届省赛JAVA真题----包子凑数
  4. ffmpeg播放器 android,Android使用FFmpeg(六)--ffmpeg实现音视频同步播放
  5. 【点阵液晶编程连载一】写在前面
  6. myeclipse从svn检出代码转成maven后格式有误解决方法
  7. 原生JS实现各种经典网页特效——Banner图滚动、选项卡切换、广告弹窗等
  8. vue 使用html自带title属性 鼠标悬浮展示内容 修改其样式
  9. 新唐MCU之UART软硬件调试过程记录及总结
  10. 生成均匀分布次序统计量的伪随机数 生成删失伪随机样本
  11. 1183 连接字符串
  12. 灯管实验的em算法_【大学物理实验】日光灯电路的组装及参数测量.ppt
  13. Robot Framework+Autoit 安装教程
  14. php微信里面换行符,如何在字符串中间加换行符js微信小程序实现人脸识别
  15. 内网计算机安全使用规则,局域网网络安全注意事项
  16. python函数map和split函数
  17. Linux的一些快捷键
  18. 小米手机应用ICON角标Badger显示
  19. 系统部署服务器位置,室内定位系统在实际项目中的部署
  20. C#添加WebService服务实现天气预报

热门文章

  1. 阿里云盘小白羊版 v2.9.19 绿色版
  2. 草莓软件验证系统源码 附带易语言模块
  3. Spring Security记住我功能之潜在的账号盗取风险
  4. 网站运营需要注意什么?
  5. jQuery 去除表单空值 serialize how to eliminate empty fields
  6. 逐帧动画与人运动动画制作
  7. MySQL5.7更改密码时出现ERROR 1054
  8. 并查集——畅通工程(hdu1232)
  9. 数据结构---function
  10. Linux——批量查找替换方法(VIM和sed)