hdoj 4324 Triangle Love
2015-08-26 17:32
148 查看
考察点: 拓扑排序 &&
判断一张图成环
题目大意:每一组数据都以 (n*n)
矩阵的方式给出,初始化为0.
填充(i,j)为1,即为i喜欢j,要求判断关系网中是否存在三角恋(即Triangle Love)
题目解析: 将给出的矩阵模型化为n个人之间一一对应的关系,并且这些关系明显会构成一张图,而判断一张图是否成环,所以使用拓扑排序即可。
判断是否成环:
如果一旦操作的次数 p 大于给出的人数 n ,就可以判断给出的图中存在环,输出Yes.
否则输出No
AC代码:
判断一张图成环
题目大意:每一组数据都以 (n*n)
矩阵的方式给出,初始化为0.
填充(i,j)为1,即为i喜欢j,要求判断关系网中是否存在三角恋(即Triangle Love)
题目解析: 将给出的矩阵模型化为n个人之间一一对应的关系,并且这些关系明显会构成一张图,而判断一张图是否成环,所以使用拓扑排序即可。
判断是否成环:
如果一旦操作的次数 p 大于给出的人数 n ,就可以判断给出的图中存在环,输出Yes.
否则输出No
AC代码:
#include <stdio.h> #include <string.h> using namespace std; char map[2050][2050]; int vis[2050]; int main() { int t,n; while(scanf("%d",&t)!=EOF){ for(int k=1;k<=t;k++){ scanf("%d",&n); getchar(); memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ map[i][j]=getchar(); if(map[i][j]=='1') // 将i 与 j 的关系放入图中 vis[j]++; // vis 数组辅助记录关系的总数 p } getchar(); } int p,count=0; for(int i=1;i<=n;i++){ p=1; while(vis[p]!=0) p++; // 记录下 此时关系的总数p if(p>n){ // 如果成环 ,将count 赋值1,并跳出循环 count=1; break; } else{ vis[p]--; for(int j=1;j<=n;j++){ if(map[p][j]=='1') vis[j]--; } } } if(count==1) printf("Case #%d: Yes\n",k); //如果存在三角恋,输出Yes else printf("Case #%d: No\n",k); // 不存在,输出 No } } return 0; }
相关文章推荐
- 杭电1874-畅通工程续(最短路径,dijkstra,spfa,floyd)
- iOS 多个tabBar之间跳转的问题
- 一句话改变TWinControl控件的left坐标的前世今生(入口函数是SetBounds,然后调用SetWindowPos起作用,并发消息更新Delphi的left属性值)
- 共用体的初始化与引用
- 【使用JSOUP实现网络爬虫】从元素抽取属性,文本和HTML
- Oracle Database 12cRelease 安装
- rundll32.exe引起的打印机无法安装故障
- 3783 ZOJ【字符串】
- 地产从业者:房子就像手机电脑,10年后一定买得起
- hdu5412
- 在ARC下引用第三方库等使用MRC 设置 -fno-objc-arc无效
- Struts2传值的背后机制:Value Stack(值栈)
- CSS 选择器及各样式引用方式
- leetcode: Binary Tree Postorder Traversal
- LeetCode(41)First Missing Positive
- 【组合数学】【prufer数列】【HNOI 2004】【bzoj 1211】树的计数
- OrCAD DSN文件无故消失解决办法
- VMware Workstation下VMnet1等虚拟网卡与主机网卡之间的关系
- VMware Workstation下VMnet1等虚拟网卡与主机网卡之间的关系
- 什么是Platform Services Controller