Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 09.04.2016
Сообщений: 98
1

Коммивояжер

24.05.2017, 20:16. Показов 811. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал программу Коммивояжер методом ветвей и границ, выводит только путь, а нужно еще минимальную длину пути. Как это сделать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
const int nm=5;
 
 
int a[nm][nm];
int n;
 
void makebase(int ik, int jk)
{
 int i,j;
 for (i=0;i<n;i++) if (a[i][jk]>=0) a[i][jk]=-1;
 for (j=0;j<n;j++) if (a[ik][j]>=0) a[ik][j]=-1;
 a[ik][jk]=-2;
 if (a[jk][ik]>=0) a[jk][ik]=-1;
}
 
int main()
{
 int i,j,c,i2,j2,i3,j3;
 int cnt;
 int minv, miniv, minjv, maxv;
 int flag;
 ifstream f("input.txt");
 f >> n;
 for (i=0;i<n;i++) for (j=0;j<n;j++) f >> a[i][j];
 f.close();
 for (i=0;i<n;i++) a[i][i]=-1;
 for (c=0;c<n;c++)
 {
  // looking for one-in-row or one-in-col element
  flag=0;
  for (i=0;(i<n)&&(flag==0);i++)
  {
   cnt=0;
   for (j=0;j<n;j++) if (a[i][j]>=0)
   {
    i2=i;
    j2=j;
    cnt++;
   }
   if (cnt==1) flag=1;
  }
  for (j=0;(j<n)&&(flag==0);j++)
  {
   cnt=0;
   for (i=0;i<n;i++) if (a[i][j]>=0)
   {
    i2=i;
    j2=j;
    cnt++;
   }
   if (cnt==1) flag=1;
  }
  if (flag==1)
  {
   makebase(i2,j2);
   continue;
  }
 
  // minus mins
  for (i=0;i<n;i++)
  {
   minv=30000;
   for (j=0;j<n;j++)
    if ((a[i][j]>=0)&&(a[i][j]<minv)) minv=a[i][j];
   for (j=0;j<n;j++) if(a[i][j]>=0) a[i][j]-=minv;
  }
  for (j=0;j<n;j++)
  {
   minv=30000;
   for (i=0;i<n;i++)
    if ((a[i][j]>=0)&&(a[i][j]<minv)) minv=a[i][j];
   for (i=0;i<n;i++) if(a[i][j]>=0) a[i][j]-=minv;
  }
 
  // checking nulls and looking for base values
 
  maxv=-1;
  for (i=0;i<n;i++) for (j=0;j<n;j++) if (a[i][j]==0)
  {
   miniv=30000;
   minjv=30000;
   for (i2=0;i2<n;i2++) if ((a[i2][j]>=0)&&(i2!=i)&&(a[i2][j]<miniv)) miniv=a[i2][j];
   for (j2=0;j2<n;j2++) if ((a[i][j2]>=0)&&(j2!=j)&&(a[i][j2]<minjv)) minjv=a[i][j2];
   if (miniv+minjv>maxv)
   {
    maxv=miniv+minjv;
    i3=i;
    j3=j;
   }
  }
 
  makebase(i3,j3);
 }
 
 // output
 i2=0;
 cout << i2+1;
 for (c=0;c<n;c++)
 {
  for (j=0;j<n;j++) if (a[i2][j]==-2)
  {
   cout << "->" << j+1;
   i2=j;
   break;
  }
 }
 getch();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2017, 20:16
Ответы с готовыми решениями:

Коммивояжер
Доброго времени суток! Для полного графа и n &lt;= 20 нужно написать программу для задачи...

Коммивояжер (бродячий торговец)
Ребят, помогите с реализацией задачи о коммивояжере, желательно простое решение полным перебором:...

Коммивояжёр - или оптимизация пути.
Задача заключается в том, чтобы оптимизировать пути движения транспорта от подбора клиента до его...

коммивояжер
не могу найти подходящую приложению для коммивояжер!

0
24.05.2017, 20:16
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2017, 20:16
Помогаю со студенческими работами здесь

Коммивояжер. Расчёт минимального пути
нужно переделать функцию которая считает минимальный путь с помощью метода ветвей и границ, на...

Коммивояжёр, метод поиска в глубину
Всем привет. Собственно, тема говорит сама за себя. И ведь задачка-то не самая сложная, но что-то...

Коммивояжер (полный перебор), и сколько стоит?
Здравствуйте, подскажите работающую программу для решения задачи коммивояжера методом полного...

Определить, сможет ли коммивояжер обойти все клетки и вернутся в исходную клетку
Имеется клеточное поле размером N*M. Из каждой клетки можно перемещатся в одну из соседних, если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
Rust или Go? А может C++?
hw_wired 28.01.2025
С каждой новой технологией или методологией появляются новые языки программирования, призванные решать конкретные задачи либо улучшать аспекты производительности и безопасности. Среди множества. . .
Fortran и WinAPI: как создать приложение с графическим интерфейсом
hw_wired 28.01.2025
Fortran — это один из старейших высокоуровневых языков программирования, широко используемый в науке и инженерии уже несколько десятилетий. Его название происходит от "Formula Translation" (перевод. . .
Списки в Haskell
hw_wired 28.01.2025
Haskell является функциональным языком программирования, который отличается лаконичностью синтаксиса и мощными абстракциями. Важным концептом в Haskell являются списки — упорядоченные коллекции. . .
Функции высшего порядка в Haskell
hw_wired 28.01.2025
Haskell – это современный функциональный язык программирования, который получил широкое распространение благодаря своей выразительности и мощным абстракциям. Одной из ключевых особенностей Haskell. . .
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru