Witam, czy możecie sprawdzić czy moj kod wyznaczania cyklu Hamiltona jest poprawnie napisany?
#include <stdio.h>
#include <stdlib.h>
int koszt=0;
int licznik=0;
int maksymalny(int tab[],int n)
{
int i;
int max,a;
max=tab[1];
i=1;
while(max=0)
{
max=tab[i];
i++;
}
a=i;
for(i=2; i<=n; i++)
{
if(tab[i]!=0){
licznik++;
if(tab[i]>max)
{
max=tab[i];
a=i;
}
}
}
return a;
}
int minimalny(int tab[],int n)
{
int i;
int min,a;
min=tab[1];
a=1;
for(i=1; i<=n; i++)
{
if(tab[i]<min)
{
min=tab[i];
a=i;
}
}
koszt=koszt+min;
return a;
}
int main()
{
FILE* plik;
plik=fopen("plik.txt", "r");
int n, i, j, s;
fscanf(plik,"%d",&n);
fscanf(plik,"%d",&s);
printf("ilosc wierzcholkow to %d\n\n", n);
int W[n+1][n+1];
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
fscanf(plik, "%d", &W[i][j]);
}
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
printf("W[%d][%d]=%d ", i, j, W[i][j]);
printf("\n");
}
int C[n+1], odleglosc[n+1], cykl[2*n+3], V[n+1], E[2*n+3];
int f, iteracja, x, u,v;
iteracja=1;
for(i=1; i<=2*iteracja+2; i++)
cykl[i]=0;
for (j=1; j<=n; j++)
odleglosc[j]=W[s][j];
for(i=0; i<=n; i++)
C[i]=10000;
for(i=0; i<=n; i++)
V[i]=0;
V[1]=s;
for(i=0; i<=n; i++)
E[i]=0;
for(i=0; i<=2*iteracja; i++)
{
E[i]=s;
}
while (iteracja<n)
{
licznik++;
odleglosc[s]=NULL;
f=maksymalny(odleglosc,n);
odleglosc[f]=NULL;
for(j=1; j<=n; j++)
{
if(odleglosc[j]!=NULL)
{
licznik++;
if(W[f][j]<odleglosc[j])
odleglosc[j]=W[f][j];
}
}
V[iteracja+1]=f;
j=1;
for(i=1; i<=iteracja; i++)
{
C[i]=W[E[j]][f]+W[f][E[j+1]]-W[E[j]][E[j+1]];
j=j+2;
}
x=minimalny(C,iteracja);
u=2*x;
v=2*x+1;
for(i=2*(iteracja+1); i>=u; i--)
E[i]=E[i-2];
E[u]=f;
E[v]=f;
for(i=1; i<=2*iteracja+2; i++)
{
cykl[E[i]]=E[i+1];
i++;
}
iteracja++;
}
printf("\n\nCYKL:");
printf("%d ",s);
for(i=2; i<2*n+2; i=i+2)
printf("%d ",E[i]);
printf("\n\nKOSZT:%d\n\n", koszt);
printf("\n\nLICZNIK:%d\n\n", licznik);
return 0;
}