Форум программистов, компьютерный форум CyberForum.ru

Поиск кратчайшего пути в графе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ if..else http://www.cyberforum.ru/cpp-beginners/thread410189.html
уважаемые программисты, столкнулась с таким моментом в коде int kk; for(kk=0; kk<2; kk++) { if(kk) { //что-то }
C++ Найти значение выражения Как написать программу, чтобы вычислить значение выражения рекурентно: S= sum(A^i *(2i+1) + sumb^(k+1) Добавлено через 1 час 41 минуту :cry: Добавлено через 8 часов 26 минут Помогите тогда просто возвести число в степень, pow не работает ! http://www.cyberforum.ru/cpp-beginners/thread410181.html
C++ Программная реализация криптоалгоритма с абсолютной криптостойкостью «Одноразовый блокнот»
Друзья, товарищи! Прошу вашей помощи в реализации задания. Прошу помочь кто чем может. 1. Программа шифрования должна считывать ключевую последовательность из файла K.txt, открытый текст из файла М.txt и записывать шифр в файл C.txt 2. Программа дешифрования должна считывать ключевую последовательность из файла K.txt, шифр из файла C.txt и записывать открытый текст в файл М1.txt Генерация...
задачи с функиями C++
С помощью координат заданы 4 точки в трехмерном пространстве. Определить пару точек наиболее близких друг к другу.
C++ C++ Visual Studio http://www.cyberforum.ru/cpp-beginners/thread410129.html
Здравствуйте. Появилась проблемма с решением курсовой работы в некоторых вопросах. Буду безмерно благодарен за помощь. Задание 1. Что содержат файлы *. h в проекте C + + Visual Studio? Задание 2 Какие значения получат переменные A, B, C, D, E, F при выполнении программы int N = 15 ; int A,B,C,D,E,F;
C++ В матрице поменять местами строку В матрице поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением. Предполагается, что эти элементы единственны. подробнее

Показать сообщение отдельно
bacekk
2 / 2 / 0
Регистрация: 30.11.2010
Сообщений: 89
18.12.2011, 21:44  [ТС]     Поиск кратчайшего пути в графе
Народ, подойдет код для моего задания:

Код
//---------------------------------------------------------------------------
//Алгоритм Дейкстры.поиска кратчайшего пути
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
#pragma argsused

#define VERTEXES 9	//Число вершин в графе

int v;
int main(int argc, char* argv[])
{
   clrscr();
   int infinity=1000;                     // Бесконечность
   int p= VERTEXES;				// Количество вершин в графе
   int a[VERTEXES][VERTEXES]={ 0,1,0,0,1,3,  // Матрица смежности графа
                               1,0,5,0,0,1,
                               0,5,0,5,20,1,
     	                         0,0,5,0,3,2,
                               1,0,20,3,0,10,
                               3,1,1,2,10,0  };

   // Будем искать путь из вершины s в вершину g
   int s;              		// Номер исходной вершины
   int g;              		// Номер конечной вершины
   cout<<"Введите s: ";  	// Номер может изменяться от 0 до p-1
   cin>>s;
   cout<<"Введите g: ";
   cin>>g;
   int x[VERTEXES]; //Массив, содержащий единицы и нули для каждой вершины,
                  // x[i]=0 - еще не найден кратчайший путь в i-ю вершину,
                  // x[i]=1 - кратчайший путь в i-ю вершину уже найден
   int t[VERTEXES];  //t[i] - длина кратчайшего пути от вершины s в i
   int h[VERTEXES];  //h[i] - вершина, предшествующая i-й вершине
   		         // на кратчайшем пути

   // Инициализируем начальные значения массивов
   int u;		    // Счетчик вершин
   for (u=0;u<p;u++)
   {
      t[u]=infinity; //Сначала все кратчайшие пути из s в i 
	//равны бесконечности
      x[u]=0;        // и нет кратчайшего пути ни для одной вершины
   }
   h[s]=0; // s - начало пути, поэтому этой вершине ничего не предшествует
   t[s]=0; // Кратчайший путь из s в s равен 0
   x[s]=1; // Для вершины s найден кратчайший путь
   v=s;    // Делаем s текущей вершиной
   
   while(1)
   {
      // Перебираем все вершины, смежные v, и ищем для них кратчайший путь
      for(u=0;u<p;u++)
      {
         if(a[v][u]==0)continue; // Вершины u и v несмежные
         if(x[u]==0 && t[u]>t[v]+a[v][u]) //Если для вершины u еще не 
	//найден кратчайший путь
            	// и новый путь в u короче чем 
	//старый, то
         {
            t[u]=t[v]+a[v][u];	//запоминаем более короткую длину пути в
	//массив t и
            h[u]=v;	//запоминаем, что v->u часть кратчайшего 
	//пути из s->u
         }
      }

      // Ищем из всех длин некратчайших путей самый короткий
      int w=infinity;  // Для поиска самого короткого пути
      v=-1;            // В конце поиска v - вершина, в которую будет 
                       // найден новый кратчайший путь. Она станет 
                       // текущей вершиной
      for(u=0;u<p;u++) // Перебираем все вершины.
      {
         if(x[u]==0 && t[u]<w) // Если для вершины не найден кратчайший 
                               // путь и если длина пути в вершину u меньше
                               // уже найденной, то
         {
            v=u; // текущей вершиной становится u-я вершина
            w=t[u];
         }
      }
      if(v==-1)
      {
         cout<<"Нет пути из вершины "<<s<<" в вершину "<<g<<"."<<endl;
         break;
      }
      if(v==g) // Найден кратчайший путь,
      {        // выводим его
         cout<<"Кратчайший путь из вершины "<<s<<" в вершину "<<g<<":";
   	   u=g;
   	   while(u!=s)
         {
            cout<<" "<<u;
            u=h[u];
         }
         cout<<" "<<s<<". Длина пути - "<<t[g];
   	   break;
      }
      x[v]=1;
   }
   getch();
}
/*Программа запрашивает вершины s и q и выводит кратчайший путь. Например, после ввода s = 3, q = 6, программа выводит 

Нет пути из вершины 3 в вершину 6. 

После ввода s = 0, q = 2 программа выводит 

Кратчайший путь из вершины 0 в вершину 2: 2 5 1 0. Длина пути = 3.*/

//---------------------------------------------------------------------------

Подойдет это?
 
Текущее время: 06:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru