我必须确定图是否连通。
我认为我在这里使用了不好的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/