c:忽略返回并重复函数

标签 c function return

我必须确定图是否连通。

我认为我在这里使用了不好的return概念,但问题是:当top =<0且k == vertecsfuncion时,进入倒数第二个if,以及我想要的return 0;是结束函数并继续执行。但到达时返回0;它再次上升到 while(top>0)。这种情况发生两次,而第二次,顶部增加一(我不知道如何),然后到达“错误”。 感谢您抽出时间。

int connex(int **matrix, int *visited, Pila *p, int vertucsfuncion, int k,int x, int top){

    int u,j,c,f,contdos=0, cont=0;      
    x = PILA_top(*p);

    printf("\n%d\n",top);

    while (top > 0){

        cont = 0;           
        k++;

        for(u=0;u<k;u++){
            if(visited[u]!=x){
                contdos++;
            }
        }

        if (contdos==k){
            visited[contdos-1]=x;
            contdos = 0;
        }else{
            k--;
            contdos = 0;
        }       

        for(j=0;j<vertucsfuncion;j++){
            if(matrix[(x-1)][j]!=0){
                if(j!=(x-1)){
                    matrix[(x-1)][j]=matrix[(x-1)][j]-1;
                    matrix[j][(x-1)]=matrix[j][(x-1)]-1;
                    for(c=0;c<vertucsfuncion;c++){
                        for(f=0;f<vertucsfuncion;f++){
                            printf("|%d|",matrix[c][f]);
                        }
                        printf("\n");
                    }
                    printf("\n");
                    PILA_push(p,(j+1));
                    top++;
                    x = PILA_top(*p);
                    connex(matrix,visited,p,vertucsfuncion,k,x,top);
                }else{
                    matrix[(x-1)][j]=matrix[(x-1)][j]-1;
                    for(c=0;c<vertucsfuncion;c++){
                        for(f=0;f<vertucsfuncion;f++){
                            printf("|%d|",matrix[c][f]);
                        }
                        printf("\n");
                    }
                    PILA_push(p,(j+1));
                    top++;

                    connex(matrix,visited,p,vertucsfuncion,k,x,top);
                }               
            }               
            cont++;             
        }

        if(cont == vertucsfuncion ){                
            PILA_pop(p);
            top--;
            connex(matrix,visited,p,vertucsfuncion,k,x,top);
        }   
    }
    if(k==vertucsfuncion){
        printf("Is connex");
        return 0;
    }
    else{
        return 1;
    }

    return 0;
}

最佳答案

在 connex 内,在 while(top>0) 循环内,您再次递归调用 connex:

top--;
connex(matrix,visited,p,vertucsfuncion,k,x,top);

当对 connex 的第二次调用调用 return 0 时,它只会从对 connex 的内部调用返回,而外部调用仍将以 while(top >0) 继续进行> 循环。

关于c:忽略返回并重复函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30639377/

相关文章:

javascript - 是否可以在页面加载时调用函数

c - 去除某个程序对某个DLL的依赖

php - php和c之间共享配置文件

c - 这个找出 1-n 个数字之间的素数的程序有什么问题?

javascript - Onclick 正在工作,但 Onchange 不工作 - javascript

c# - 函数返回路径

c++ - 从专有格式到 C++ 类

java - 如何在另一个数组中使用一个数组的索引?

javascript - 为什么这个函数不返回任何值?

html - 输入代码中的返回行导致输出中元素之间的间隙/空白?