크루스컬 알고리즘 도움좀 부탁드립니다.
루리
질문 제목 :
크루스컬 알고리즘 도움좀 부탁드립니다.
사이클이 구현이 안됩니다.
질문 내용 :
void kruskal(){
struct node *t = null;
int a,b,vw,i;
a = b = i = vw = 0;
for(int j = 0; j noofnumber; j++){
for(i = 0; i noofnumber; i++){ //사이클 배열 초기화
array[j][i] = 0;
visited[i] = 0;
}
}
for(i = 0; i noofnumber; i++){
find_min_delete(&vw,&a,&b);
printf(a = %d, b = %d vw = %d \n,a,b,vw);
array[a][b] = 1;
array[b][a] = 1;
if(cycle(a,b) == 1){
t = insert_t(t,vw);
}
else{
array[a][b] = 0;
array[b][a] = 0;
}
}
printlinkedlist();
printf(\n);
}
int main(){
kruskal();
}
빨간줄 부분을 구현하기 위해서
코드를 짯습니다. 내용은 사이클이 크루스컬 알고리즘을 하다가 사이클이 발생하면
노드에 더하지 않는거인데요
int cycle(int a, int b){
int starta = a; //0
int startb = b; //1
int x = 0;
while(x noofnumber){
for(int j = 0; j noofnumber; j++){
for(int i = 0; i noofnumber; i++){
if(i != a && array[b][i] != 0){// i = 2 , array[][] 가 0이아닐경우 i= 0 - pass array[1][0] != 0
printf(%d %d \n,a,b);
if(starta == b){ //
return(0);
break;
}else if(startb == i){
return(0);
break;
}
}
a = b;
b = i;
}
}
x++;
}
return(1);
}
라고 작성하니 되는 그래프가 있고 안되는 그래프가 있고 하네요
그리고 맨처음 들어가는 값은 무조건 안나오고요.
수정좀 부탁드립니다.