我必须确定是否已连接图形。

我认为我在这里使用了return概念,但问题是:当top = 0)。这发生了两次,而第二次,top增加了一个(我不知道如何),然后到达“错误”。
感谢您的时间。

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 - c:忽略返回并重复执行功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30639377/

10-12 19:02