惊鸿落人间- 2023-02-20 22:15 采纳率: 100%
浏览 95
已结题

显示的是段错误,问题详情如下


int visit[10000]={0};
int c(LGraph Graph)
{
    visit[0]=1;
    Ptr t=Graph->G[0].FirstEdge;
    Ptr queue[10000];
    int front=0,rear=0;
    queue[rear++]=t;
    int cnt=0;
    while(front<rear){
        Ptr temp=queue[front++];
        while(temp->next){
            queue[rear++]=temp->next;
            visit[temp->next->adjV]=1;
            temp=temp->next;
        }
    }
    cnt++;
    for(int i=0;i<Graph->Nv;i++){
        if(visit[i]==0){
            Ptr t=Graph->G[i].FirstEdge;
            Ptr queue[10000];
            int front=0,rear=0;
            queue[rear++]=t;
            int cnt=0;
            while(front<rear){
                Ptr temp=queue[front++];
                while(temp->next){
                    queue[rear++]=temp->next;
                    visit[temp->next->adjV]=1;
                    temp=temp->next;
                }
            }
            cnt++;
        }
    }
    return cnt;
}

因为我现在看不了原题了所以大概回忆着写了出来,就是让求有几个强连通分量,然后数据结构是邻接表,我的思路是首先从序号为0的结点开始进行广度优先遍历,也就是层序遍历,把序号0所在的强连通分量都遍历后,我再检查所有节点中谁没被遍历过,即visit[i]==0;
然后用和上面同样的方法进行遍历
但是总是不对,显示为段错误,到底怎么回事呢?

  • 写回答

7条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-20 22:31
    关注

    基于Monster 组和GPT的调写:
    改了改:

    int visit[10000]={0};
    
    int c(LGraph Graph)
    {
        visit[0]=1;
        Ptr t=Graph->G[0].FirstEdge;
        Ptr queue[10000];
        int front=0,rear=0;
        queue[rear++]=t;
        int cnt=0;
    
        while(front<rear){
            Ptr temp=queue[front++];
            while(temp){
                if(!visit[temp->adjV]){
                    queue[rear++]=Graph->G[temp->adjV].FirstEdge;
                    visit[temp->adjV]=1;
                }
                temp=temp->next;
            }
        }
    
        cnt++;
        for(int i=0;i<Graph->Nv;i++){
            if(!visit[i]){
                Ptr t=Graph->G[i].FirstEdge;
                front=0,rear=0;
                queue[rear++]=t;
                cnt++;
                while(front<rear){
                    Ptr temp=queue[front++];
                    while(temp){
                        if(!visit[temp->adjV]){
                            queue[rear++]=Graph->G[temp->adjV].FirstEdge;
                            visit[temp->adjV]=1;
                        }
                        temp=temp->next;
                    }
                }
            }
        }
        return cnt;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 修改了问题 2月20日
  • 修改了问题 2月20日
  • 展开全部

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3