xx小寂 2021-11-29 20:51 采纳率: 50%
浏览 12
已结题

并查集应用到图的环检测,codeblocks不报错,但是主函数里调用的方法不能实现?


#include<stdio.h>
#include <iostream>

using namespace std;
#define MAXSIZE 100
typedef struct node
{
    int data;//结点对应编号
    int rank;//结点对应秩
    int parent;//结点对应双亲下标
}UFSTree;//并查集树的结点类型
void set(UFSTree t[],int n)//初始化并查集
{
    int i;
    for(i=1;i<=n;i++)
    {
        t[i].data=i;//初始为编号
        t[i].rank=0;
        t[i].parent=i;//双亲初始化指向自己
    }
}
int find_set(UFSTree t[],int x)//查找一个元素所属集合
{
 if(x!=t[x].parent)
    t[x].parent=find_set(t,t[x].parent);
 return t[x].parent;
}
void union_set(UFSTree t[],int x,int y)//两个元素各自所属集合的合并
{
    x=find_set(t,x);y=find_set(t,y);//查找x,y在子集合中的位置
    if(t[x].rank>t[y].rank)
    t[y].parent=x;
      else
      t[x].parent=y;
    if(t[x].rank=t[y].rank)
        t[y].rank++;

}
int undirect(UFSTree t[],int x,int y)//判断无向图是否有环
{
    if(find_set(t,x)==find_set(t,y))
    return 1;
    else
    return 0;
}
int main()
{
    int x,y;
    int m=0;
    int V,E;//v为顶点的个数,E为边的个数
    UFSTree t[MAXSIZE];
    printf("请输入顶点和边的个数\n");
    scanf("%d %d",&V,&E);
    printf("请输入顶点值\n");
   for(int i=0;i<V;i++)
    {
        scanf("%d",&t[i].rank);
    }
    for(int i=0;i<E;i++)
    {
              printf("请输入边的两个顶点\n");
              scanf("%d %d",&x,&y);
              undirect(t,x,y);
               printf("输入成功");
    }
    if(m==1)
printf("无向图有环\n");
else
  printf("无向图没有环\n");
    return 0;
}











  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月7日
    • 创建了问题 11月29日

    悬赏问题

    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算