Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2013, 23:41   #1
yulja-uk
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 22
По умолчанию Задача коммивояжер на с++ (как исправить ошибку)

#include <fstream.h>
const int maxn=100; //максимум городов
int n,i,s,min,count,found; //n-количество городов
//i-счетчик
//s-текущая сумма
//min-минимальная сумма
//count-счетчик пройденных городов
//found-найден ли город
int a[maxn][maxn]; //матрица рассояний
int m[maxn],minm[maxn]; //m-текущий путь
//minm-минимальный путь

void _input() //ввод данных
{
ifstream fin("input.txt"); //открыли файл
fin >> n; //считали n
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
fin >> a[i][j]; //считали матрицу расстояний
}

void _output() //вывод данных
{
ofstream fout("output.txt"); //открыли файл
if (found) //если найден маршрут...
{
fout << "Lenght of min path = " << min << endl;
fout << "Path : ";
int c=1; //номер в порядке обхода городов
for (int i=1;i<=n;i++) //пробегаем по всем городам
{
int j=1;
while ((j<=n)&& //ищем следующий город в порядке обхода
(minm[j]!=c)) j++;
fout << j <<"->";
c++;
}
fout << minm[1] << endl; //обход завершается первым городом
}
else fout << "Path not found!";
}
void search(int x) //поиск следующего города в порядке
//обхода после города с номером Х
{
if ((count==n)&& //если просмотрели все города
(a[x][1]!=0)&& //из последнего города есть путь в первый город
(s+a[x][1]<min)) //новая сумма расстояний меньше минимальной суммы
{
found=1; //маршрут найден
min=s+a[x][1]; //изменяем: новая минимальная сумма расстояний
for (int i=1;i<=n;i++)minm[i]=m[i];//изменяем: новый минимальный путь
}
else
{
for (int i=1;i<=n;i++) //из текущего города просматриваем все города
if ((i!=x)&& //новый город не совпадает с текущим
(a[x][i]!=0)&& //есть прямой путь из x в i
(m[i]==0)&& //новый город еще не простотрен
(s+a[x][i]<min)) //текущая сумма не превышает минимальной
{
s+=a[x][i]; //наращиваем сумму
count++; //количество просмотренных городав
m[i]=count; //отмечаем у нового города новый номер в порядке обхода
search(i); //поиск нового города начиная с города i
m[i]=0; //возвращаем все назад
count--; //-"-
s-=a[x][i]; //-"-
}
}
}
void run()
{ //инициализация
s=0;
found=0;
min=32767;
for (int i=1;i<=n;i++) m[i]=0;
count=1;
m[1]=count; //считаем что поиск начинается с первого города
search(1); //считаем что поиск начинается с первого города
}

void main()
{
_input(); //ввод данных
run(); //запуск основного алгоритма
_output(); //вывод результатов
}


Выводит ошибку на строчке:
fout << "Lenght of min path = " << min << endl;
yulja-uk вне форума Ответить с цитированием
Старый 05.04.2013, 14:14   #2
Радик29
Пользователь
 
Регистрация: 26.12.2012
Сообщений: 90
По умолчанию

ему похоже не нравится min
Радик29 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как исправить ошибку? Gtnz8 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 23.12.2012 12:19
как исправить ошибку obsession Общие вопросы Delphi 1 15.04.2012 10:20
Легкая задача в С++,Не могу исправить найденную ошибку Aaaaaa111 Помощь студентам 3 25.02.2012 14:43
Задача по VC++ найти и исправить ошибку!!! Executer Фриланс 2 04.11.2010 19:03
Задача на строки...помогите исправить ошибку Ker_33rus Общие вопросы C/C++ 9 05.12.2009 14:12