Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Помогите понять код задачи коммивояжера


Автор: AlexeroN 30.4.2010, 20:08
Всем доброго времени суток. Дали задание в универе по задаче коммивояжера.  Задача заключается в отыскании самого выгодного маршрута, проходящего через указанные города хотя бы по одному разу с последующим возвратом в исходный город. В условиях задачи указываются критерий выгодности маршрута (кратчайший, самый дешёвый) и соответствующие матрицы расстояний, стоимости и т. п. Код нашел на DMTsoft.ru, самому написать было бы трудно, к вам обращаюсь за помощь помочь понять что и к чему, непонятки я обозначил "//?". Пжл, если согласитесь откоментировать укажите номер строки или диапазон
Код

#include <stdlib.h>
      #include <time.h>
      #include <stdio.h>
       
      int wpchk(int w, int *wpts)
      {
      int i=0;
      int flg=0;
      while(wpts[i]!=-1)//?
      {
      if(wpts[i]==w){flg=1;}//?
      i++;
      }
      if (flg==0) {return 0;} else return 1;
      }
      void main()
      {
      srand( (unsigned)time( NULL ) );//?
      //int prices[10][10];
      int waypoint[11]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1};//?
      int way[11]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};//?
      int start=-1;
      int end=-1;
      int min;
      int imin;
       
                             // 0 1 2 3 4 5 6 7 8 9
      int prices[10][10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0
                                     0, 0, 2, 9, 8, 0, 0, 0, 0, 0, //1
                                     0, 2, 0, 3, 0, 20,0, 0, 0, 0, //2
                                    0, 9, 3, 0, 7, 4, 0, 0, 0, 0, //3
                                    0, 8, 0, 7, 0, 11,0, 0, 0, 0, //4
                                    0, 0, 20,4, 11,0, 0, 0, 0, 0, //5
                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //6
                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //7
                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //8
                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0};//9       
printf("Enter № of start location:");
scanf("%i", &start);
printf("Enter № of finish location : ");
scanf("%i", &end);
waypoint[0] =start;
int n = 0;
int w;
while(waypoint[n] != end)
{
min = 0;
w = waypoint[n];//?
for(int i = 0;i < 10;i++)
{ 
if (((min == 0) || ((prices[w][i] < min) && (prices[w][i] > 0))) && wpchk(i,waypoint) == 0)//?
{min = prices[w][i]; imin = i ;}
}
n++;
waypoint[n] = imin;}
printf("\nThe way is:\n");
int i = 0;
while (waypoint[i] != -1)
{
printf("%i", waypoint[i]);
i ++;
}
getchar();
getchar();
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)