您的位置:首页 > 其它

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代码:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: