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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2011, 20:03   #1
LENA_M
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 98
По умолчанию Визуализация графа

Доброго времени суток всем!
У меня вопрос. Написала программку для нахождения кратчайшего пути (алгоритм Дейкстра), но мне надо её как то по приличней оформить, т.е.
можно как то визуализовать результат так, чтобы, к примеру, после того как прога подсчитает результат, рисовался бы граф и этот самый короткий путь, который посчитала программа? Как это сделать и с чего начать?
Вот код работы :
Код:
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define word unsigned int

int i, j, n, p, xn, xk;
int flag[11];
word c[11][11], l[11];
char s[80], path[80][11];

int min(int n)
{
	int i, result;
	for(i=0;i<n;i++)
		if(!(flag[i])) result=i;
	for(i=0;i<n;i++)
		if((l[result]>l[i])&&(!flag[i])) result=i;
	return result;
}

word minim(word x, word y)
{
	if(x<y) return x;
	return y;
}

void main()
{
	cout<<"напишите число точек: ";
	cin>>n; 
	for(i=0;i<n;i++)
		for(j=0;j<n;j++) c[i][j]=0;
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
		{
		    cout<<" задайте длины рёбер  x"<<i+1<<" do x"<<j+1<<": ";
		    cin>>c[i][j];
		}
	cout<<"   ";
	for(i=0;i<n;i++) cout<<"    X"<<i+1;
	cout<<endl<<endl;
	for(i=0;i<n;i++)
	{
		printf("X%d",i+1);
		for(j=0;j<n;j++)
		{
			printf("%6d",c[i][j]);
			c[j][i]=c[i][j];
		}
		printf("\n\n");
	}
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			if(c[i][j]==0) c[i][j]=65535; //nekonecno
	cout<<" задайте начальную точку: ";
	cin>>xn;
	cout<<" задайте конечную точку: ";
	cin>>xk;
	xk--;
	xn--;
	if(xn==xk)
	{
		cout<<"Начальная и конечные точки совпадают."<<endl;
		getch();
		return;
	}

	for(i=0;i<n;i++)
	{
		flag[i]=0;
		l[i]=65535;
	}
	l[xn]=0;
	flag[xn]=1;
	p=xn;
	itoa(xn+1,s,10);
		for(i=1;i<=n;i++)
		{
			strcpy(path[i],"X");
			strcat(path[i],s);
		}
		do
		{
			for(i=0;i<n;i++)
				if((c[p][i]!=65535)&&(!flag[i])&&(i!=p))
				{
					if(l[i]>l[p]+c[p][i])
					{
						itoa(i+1,s,10);
						strcpy(path[i+1],path[p+1]);
						strcat(path[i+1],"-X");
						strcat(path[i+1],s);
					}
					l[i]=minim(l[i],l[p]+c[p][i]);
				}
			p=min(n);
			flag[p]=1;
		}
		while(p!=xk);
	if(l[p]!=65535)
	{
		cout<<"Put: "<<path[p+1]<<endl;
		cout<<"Dlina puti: "<<l[p]<<endl;
	}
	else
		cout<<"Путь не существует!"<<endl;
	getch();
}
Спасибо!

Последний раз редактировалось LENA_M; 13.04.2011 в 20:06.
LENA_M вне форума Ответить с цитированием
Старый 14.04.2011, 16:57   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

1. Если опыта программирования Win32 API или OpenGL нет, то к консольному приложению прикручивается элементарная графика.

2. Рисуется граф.

3. Голландские мужские фамилии на -a в русском языке, если не ошибаюсь, склоняются
Vago вне форума Ответить с цитированием
Старый 14.04.2011, 22:47   #3
LENA_M
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 98
По умолчанию

Я только не могу понять как связать свою прогу с этим, как скомпилировать всё вместе?
я же работаю Borland C++...
И в какой части проги вводить этот код, что голландцы пишут...?

Последний раз редактировалось LENA_M; 14.04.2011 в 23:17.
LENA_M вне форума Ответить с цитированием
Старый 16.04.2011, 11:00   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

LENA_M.zip
Кратчайший путь сами дорисуете?..
Vago вне форума Ответить с цитированием
Старый 19.04.2011, 01:27   #5
LENA_M
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 98
По умолчанию

Спасибо! Скажите, а что значит "Сбрасывать вывод в файл и вызывать как dot"??
Вот у меня программа выдаёт окно с построенным графом и кратчайшим дорогой, мне как мне этот вывод при помощи функции system сбрасывать в файла и вызывать как дот???(это я на то случай, если получится визуализовать при помощи graphviz...)
LENA_M вне форума Ответить с цитированием
Старый 20.04.2011, 07:00   #6
NiXer
Новичок
Джуниор
 
Регистрация: 20.04.2011
Сообщений: 1
По умолчанию

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

Откройте секрет, пожалуйста, очень нужно.
NiXer вне форума Ответить с цитированием
Старый 20.04.2011, 09:48   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Задача выбора пути.
В.Т. Сергованцев, В.В. Бледных "Вычислительная техника в инженерных и экономических расчётах". Там довольно подробно всё описано.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.04.2011, 14:33   #8
LENA_M
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 98
По умолчанию

Извините, но то, что вы мне прислали не работает... У меня выдаеёт кучу ошибок
Код:
   #include <windows.h>    // Win32API Header File
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

#include <cmath>
#include <cstring>
#include <iostream>

#define word unsigned int

using namespace std;

#define Red  RGB (255,0,0)
#define Lime RGB (206,255,0)
#define Blue RGB (0,0,255)

static HWND    hConWnd; // "unable to open include file 'cstdio.h' "

int     BCX_Line (HWND,int,int,int,int,int=0,HDC=0);
int     BCX_Circle (HWND,int,int,int,int=0,int=0,HDC=0);

HWND    GetConsoleWndHandle (void);

int flag[11] ;
word c[11][11], l[11]; // "namespace name expected" 

int min2(int n) {
	int i, result;
	for(i=0;i<n;i++)
		if(!(flag[i])) result=i;
	for(i=0;i<n;i++)
		if((l[result]>l[i])&&(!flag[i])) result=i;
	return result;
}


word minim(word x, word y) {
	if(x<y) return x;
	return y;
}


int main() {

   int i, j, n, p, xn, xk;
   char s[80], path[80][11];
   POINT pt[11] ;
   const double PI = 4. * atan( 1. ) ;

   cout<<"напишите число точек: ";
	cin >> n;                   // " earlierdeclaration of 'main() '  "
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
         c[i][j]=0;
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++) {
		   cout<<" задайте длины рёбер  x"<<i+1<<" do x"<<j+1<<": ";
		   cin>>c[i][j];
		}

   cout<<"   ";
	for(i=0;i<n;i++) cout<<"    X"<<i+1;
	cout<<endl<<endl;
	for(i=0;i<n;i++)
	{
		printf("X%d",i+1);
		for(j=0;j<n;j++)
		{
			printf("%6d",c[i][j]);
			c[j][i]=c[i][j];
		}
		printf("\n\n");
	}
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			if(c[i][j]==0)
            c[i][j] = 65535; //nekonecno
	cout<<" задайте начальную точку: ";
	cin>>xn;
	cout<<" задайте конечную точку: ";
	cin>>xk;
	xk--;
	xn--;
	if(xn==xk) {
		cout<<"Начальная и конечные точки совпадают."<<endl;
      cin.get() ;
		return 1;
	}

	for(i=0;i<n;i++) {
		flag[i]=0;
		l[i]=65535;
	}
	l[xn]=0;
	flag[xn]=1;
	p=xn;
	itoa(xn+1,s,10);
	for(i=1;i<=n;i++) {
		strcpy(path[i],"X");
		strcat(path[i],s);
	}
	do {
			for(i=0;i<n;i++)
				if((c[p][i]!=65535)&&(!flag[i])&&(i!=p))
				{
					if(l[i]>l[p]+c[p][i])
					{
						itoa(i+1,s,10);
						strcpy(path[i+1],path[p+1]);
						strcat(path[i+1],"-X");
						strcat(path[i+1],s);
					}
					l[i]=minim(l[i],l[p]+c[p][i]);
				}
			p = min2(n) ;
			flag[p]=1;
		}
		while(p!=xk);
	if ( l[p] != 65535) {
		cout<<"Put: "<<path[p+1]<<endl;
		cout<<"Dlina puti: "<<l[p]<<endl;
	}
	else
		cout<<"Путь не существует!"<<endl;


   return hConWnd;
}
LENA_M вне форума Ответить с цитированием
Старый 21.04.2011, 16:08   #9
LENA_M
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 98
По умолчанию

вот эта простая программка записи в файл, и она почемуто не работает...
Код:
#include <iostream>
#include <fstream> 
  #define word unsigned int
    usid namespace std; // Deklaration syntax error
void main()
{
  ofstream f("file.txt");
  for (int i=0; i < 10; ++i)
    {
      int v;
      cin >> v;
      f << v << endl;
    }
 }
LENA_M вне форума Ответить с цитированием
Старый 21.04.2011, 16:30   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

using namespace std;
netrino вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Визуализация рекурсии fs444 Общие вопросы C/C++ 5 04.04.2010 23:31
сложная визуализация Domanoff Помощь студентам 6 07.03.2010 19:25
Визуализация ekzobyte Мультимедиа в Delphi 1 18.03.2009 18:11
визуализация алгоритма Alar Паскаль, Turbo Pascal, PascalABC.NET 0 30.10.2006 14:10