Trích dẫn Nguyên bản được gửi bởi nobita611 Xem bài viết
mình có bài toán người du lịch đc chép ở trong sách ra nhưng có phần hàm Try() mình chưa thực sự hiểu rõ lắm và phần hàm init() là hai hàm mình chưa hiểu rõ lắm. Mong các huynh giảng cho mình với
C Code:
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <dos.h>
  5. #define index 100;
  6. #define TRUE 1
  7. #define FALSE 0
  8. #define STOP 27
  9. typedef int hanhtrinh[100];
  10. typedef int cuocphi[100][100];
  11. int xp,n,t,min,max;
  12. char ch;
  13. struct time time1;
  14. double t1,t2;
  15. hanhtrinh p,pm;
  16. cuocphi c;
  17. char b[100];
  18. float r;
  19. init()
  20. {
  21.     int i,j;
  22.     for(i=0;i<n;i++)
  23.     {
  24.         b[i]=TRUE;
  25.         p[i]=xp;
  26.     }
  27.     min=c[1][1];
  28.     max=min;
  29.     for(i=0;i<n;i++)
  30.      for(j=0;j<n;j++)
  31.      {
  32.         if(c[i][j]<min)
  33.         min=c[i][j];
  34.         if(c[i][j]>max)
  35.         max=c[i][j];
  36.      }
  37.      printf("min=%d\n",min);
  38.      printf("max=%d\n",max);
  39.      t=n*max;
  40.      printf("t=%d",t);
  41.      b[xp]=FALSE;
  42.      return 0;
  43. }
  44. inkq()
  45. {
  46.     int i;
  47.     printf("\nHanh trinh toi uu:\n");
  48.     for(i=0;i<n;i++)
  49.      printf("%d=>",pm[i]);
  50.     printf("%d\nChi phi:%d",xp,t);
  51.     return 0;
  52. }
  53. nhapdl()
  54. {
  55.     int i,j;
  56.     printf("\nSo thanh pho:");     scanf("%d",&n);
  57.     printf("\nThanh pho xuat phat(0...%d):",n-1);scanf("%d",&xp);
  58.     if((xp<0)||(xp>=n))
  59.     exit(1);
  60.     randomize();
  61.     for(i=0;i<n;i++)
  62.      for(j=0;j<n;j++)
  63.      c[i][j]=random(100);
  64.     for(i=0;i<n;i++)
  65.     c[i][i]=0;
  66.     /*for(i=0;i<n;i++)
  67.      for(j=0;j<n;j++)
  68.      {
  69.       printf("c[%d][%d]=",i,j);scanf("%d",&c[i][j]);
  70.      }*/
  71.     for(i=0;i<n;i++)
  72.      {
  73.         for(j=0;j<n;j++)
  74.         printf("%3d",c[i][j]);printf("\n");
  75.      }
  76.      return 0;
  77. }
  78. Try(int k,int s)
  79. {
  80.     int i,j,tg;
  81.     for(i=0;i<n;i++)
  82.     {
  83.         tg=s+c[p[k-1]][i];
  84.         if((b[i])&&(tg+min*(n-k)<t))
  85.         {
  86.             p[k]=i;
  87.             b[i]=FALSE;
  88.             if((k==n-1)&&(tg+c[i][xp]<t))
  89.             {
  90.                 for(j=0;j<n;j++)
  91.                 pm[j]=p[j];
  92.                 t=tg+c[i][xp];
  93.             }
  94.             else
  95.                 if(k<n-1)
  96.                     Try(k+1,tg);
  97.             b[i]=TRUE;
  98.         }
  99.     }
  100.     return 0;
  101. }
  102. main()
  103. {
  104.     clrscr();
  105.     printf("    BAI TOAN NGUOI DU LICH\n");
  106.     nhapdl();
  107.     init();
  108.     gettime(&time1);
  109.     t1=3600*time1.ti_hour+600*time1.ti_min+100*time1.ti_sec+time1.ti_hund;
  110.     Try(1,0);
  111.     inkq();
  112.     gettime(&time1);
  113.     t2=3600*time1.ti_hour+600*time1.ti_min+100*time1.ti_sec+time1.ti_hund;
  114.     printf("\nTime:%0.4f(s)",(t2-t1)/100);
  115.     getch();
  116. }
Bạn đọc trong sách nào thế bạn ???