برنامه نویسان گرامی ، کسی هست تو حل یه مشکل به من کمک کنه ؟؟
من الگوریتم کروسکال رو خیلی ساده پیاده سازی کردم به زبان c
که به این صورته
#include<stdio.h>
#include<conio.h>

void sort (int X[][3])
{
int i,j,k,r;
float m;
for(j=0;j<10;j++)
for(i=0;i<8;i++)
if(X[i][2]>X[i+1][2])
{
for(k=i;k<8;k++)
for(r=0;r<3;r++)
{
if(k==7)
continue;
else
{
m=X[k][r];
X[k][r]=X[k+1][r];
X[k+1][r]=m;
}
}
}
}
void main()
{
int M[8][3]={{0,1,10},{0,2,5},{0,4,40},{1,2,15},{1,3,25},{2,3 ,30},{2,4,20},{3,4,5}};
int N[4][2]={{-1,-1},{-1,-1},{-1,-1},{-1,-1}};
int S[5]={0,1,2,3,4};
int i,j,sum=0,p,q;

printf(" \n");
printf("geraf vorodi:\n");
for(i=0;i<8;i++)
{
for(j=0;j<3;j++)
printf(" %d",M[i][j]);
printf("\n");
}
sort(M);
printf("===================================\n");
printf("lotfan enter bezanid ta khoroji ra bebinid\n");
getch();
printf("===================================\n");
printf("\nmoratb shde bar asase vazn:\n");
for(i=0;i<8;i++)
{
for(j=0;j<3;j++)
printf(" %d",M[i][j]);
printf("\n");
}
for(i=0;i<=4;i++)
{
p=M[i][0];
q=M[i][1];
if(S[p]!=S[q])
{
N[i][0]=p;
N[i][1]=q;
sum+=M[i][2];
}

for(j=0;j<8;j++)
if(S[j]==S[q])
S[j]=S[p];
}
printf("node shoro \'0\'\n\n");
printf("\nshoroo payan \n");
printf("\nn\tm\n");
printf("________________\n");
for(i=0;i<=4;i++)
{
printf("%d\t%d",N[i][0],N[i][1]);
printf("\n");
}
printf("\nmajmoo yalha: %d",sum);
printf("\n\n");
getch();
clrscr();
}
همه چیش درسته اما یه مشکل داره اونم اینکه وقتی نودها رو بر اساس کوچکترین وزن یاد انتخاب میکنه اون دو نودی که تشکیل حلقه میدن رو نباید انتخاب کنه من این شرط رو تو برنامه گذاشتم اما باز هم نودی رو که تشکیل حلقه میده تو خروجی چاپ میشه و دو تا 1- میذاره الان مشکل من اینه که چی کار کنم این عدد منفی یک که در واقع همون نود هایی هست که تشکیل حلقه میدن رو چاپ نکنه ،
خیلی سعی کردم این مشکل رو حل کنم اما نشد
حالا اگه کسی بتونه منو راهنمایی کنه ممنون میشم فراوان
با تشکر