You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现Havel-Hakimi算法while循环内排序失效问题求助

代码问题分析
  • 计数器未重置:你定义的计数器a、b仅在程序初始化时赋值为0,每次while循环结束后没有重置,统计全0、负数的结果会累计上一次循环的数值,导致条件判断完全失效,这是最核心的错误,你误以为的排序问题实际不存在,代码每次循环开头都执行了降序排序逻辑。
  • 缺少首元素合法性校验:按照Havel-Hakimi定理规则,非升序排序后的第一个元素temp2如果大于等于当前顶点数vertex_number,说明该度序列不可能构成简单图,你没有加这个判断,很容易出现数组越界访问的问题。
  • 移除首元素逻辑不严谨:原来的代码只替换了前temp2个元素的数值,没有统一完成全部元素的前移,特殊场景下会遗留脏数据影响后续判定。
修正后的代码
#include <stdio.h>
int main(){
    int j,i,vertex_number,temp1,temp2,a,b;
    printf("Vertex Number:");
    scanf("%d",&vertex_number);
    int graph[vertex_number];
    for(i=0;i<vertex_number;i++){
        scanf("%d",&graph[i]);
    }
    while(1){
        // 每次循环先重置计数器
        a = 0;
        b = 0;
        // 降序排序数组
        for(i=0;i<vertex_number;i++){
            for(j=i+1;j<vertex_number;j++){
                if(graph[i]<graph[j]){
                    temp1=graph[i];
                    graph[i]=graph[j];
                    graph[j]=temp1;
                }
            }
        }
        // 判断是否所有顶点度都为0
        for(i=0;i<vertex_number;i++){
            if(graph[i]==0){
                a++;
            }
        }
        if(a==vertex_number){
            printf("graph exist.");
            return 0;
        }
        // 判断是否存在负的度
        for(i=0;i<vertex_number;i++){
            if(graph[i]<0){
                b++;
            }
        }
        if(b>0){
            printf("graph not exist.");
            return 0;
        }
        temp2=graph[0];
        // 新增首元素合法性判断
        if(temp2 >= vertex_number){
            printf("graph not exist.");
            return 0;
        }
        // 统一移除首元素,所有元素前移一位
        for(i=0;i<vertex_number-1;i++){
            graph[i]=graph[i+1];
        }
        vertex_number--;
        // 前temp2个元素各减1
        for(i=0;i<temp2;i++){
            graph[i]-=1;
        }
        // 调试打印
        printf("-------------\n");
        for(i=0;i<vertex_number;i++){
            printf("%d\n",graph[i]);
        }
    }
}

内容的提问来源于stack exchange,提问作者Caner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:06:04