我必须确定是否已连接图形。
我认为我在这里使用了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/