Truyen2U.Net quay lại rồi đây! Các bạn truy cập Truyen2U.Com. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

trrb22

#include<conio.h>

#include<math.h>

#include<stdio.h>

int c[20][20],a[20],xopt[20],chuaxet[20],n,fopt,cmin,can;

void nhapdulieu();

void init();

void Try(2);

void ketqua();

void main()

{

clrscr();

nhapdulieu();

init();

Try(2);

ketqua();

getch();

}

void nhapdulieu()

{

int i,j;

printf("Nhap so thanh pho: ");scanf("%d",&n);

printf("nhap ma tran chi phi c[i][j]

");

for (i=1;i<=n;i++)

for (j=1;j<=n;j++)

{

printf("c[%d][%d]= ",i,j);scanf("%d",&(c[i][j]));

}

printf("

MA TRAN CHI PHI BAN DAU LA:

");

for (i=1;i<=n;i++)

{

for (j=1;j<=n;j++) printf("%4d",c[i][j]);

printf("

");

}

cmin=0;

for (i=1;i<=n;i++)

for(j=1;j<=n;j++)

if ((cmin>c[i][j])&&(i!=j)) cmin=c[i][j];

}

void ghinhan()

{

int i,sum;

sum=(can+c[a[n]][a[1]]);

if (sum<fopt)

{

for (i=1;i<=n;i++) xopt[i]=a[i];

fopt=sum;

}

}

void Try(int i)

{

int j;

//co dinh thanh pho xuat phat la thanh pho 1//

// duyet (n-1)! hanh trinh theo nhanh can//

for (j=2;j<=n;j++)

if (chuaxet[j])

{

a[i]=j;

chuaxet[j]=0;

can+=c[a[i-1]][a[i]];

if (i==n) ghinhan();

else

if (can+(n-i+1)*cmin<fopt) Try(i+1);

can-=c[a[i-1]][a[i]];

chuaxet[j]=1;

}

}

void ketqua()

{

int i,j;

printf("

hanh trinh toi uu co chi phi la :%5d

",fopt);

for (i=1;i<=n;i++)

printf("%2d--->" ,xopt[i]);

printf("%2d",xopt[1]);

}

void init()

{

int i,j;

cmin=0;

for (i=1;i<=n;i++)

{

chuaxet[i]=1;

for (j=1;j<=n;j++)

if ((i!=j)&&(cmin>c[i][j])) cmin=c[i][j];

}

fopt=32767;//gia su fopt ban dau lay gia tri lon nhat maxint trong pascan//

can=0;

a[1]=1;

}

Bạn đang đọc truyện trên: Truyen2U.Com

Tags: