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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2012, 06:36   #1
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию Проблема с STL. Поиск эйлерова цикла на графе

Помогите пожалуйста разобраться. Выдает на выходе введенную вершину, и проверка в check() тоже не выдает матрицу. Мне кажется что ошибка в задании вектора в классе.
Знаю что можно сделать просто двумерным массивом, но хочу научится работать с векторами.
Код:
#include<list>
#include<fstream>
#include<iostream>
#include<vector>
#include<iterator>

using namespace std;

typedef vector <int> vint;
typedef vector <vint> vvint;
typedef list <int> lint;

class Graph{
private:
	vvint c;
	int n;
	lint round;
public:
	Graph(){
		ifstream fin("input.txt");
		fin >> n;
		//vvint c(n, vint(n));
		for (int i=0; i<n; i++)
			for (int j=0; j<n; j++)
			fin >> c[i][j];
	}
	~Graph(){};
	bool check(){
		int k=0;
		for(int i=0;i<n;++i){
			for(int j=0;j<n;++j)
				if(c[i][j]>0){++k;cout<<c[i][j];}
			if(k%2!=0)return 0;
		}
		return 1;
	}
	void search(int v){
		for(int i=0;i<n;++i)
			if(c[v][i]>0){
				c[i][v]=0;
				c[v][i]=0;
				search(i);
			};
		round.push_back(v);
	}
	void output(){
		if(check())
		for(lint::iterator i=round.begin();i!=round.end();++i){
			cout<<*i+1<<" ";
		}
		else cout<<"Graph not euler";
	}
};
int main(){
	Graph g;
	cout<<"Enter first node";
	int first;
	cin>>first;
	if(g.check())g.search(first-1);
	g.output();
	cin>>first;
}

Последний раз редактировалось litviak; 14.04.2012 в 06:51.
litviak вне форума Ответить с цитированием
Старый 14.04.2012, 06:56   #2
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

ну тык в конструкторе определите размер матрицы смежности. в вашем случае вектор вектров.
например так
Код:
c.resize(n, std::vector<int> (n));
Kukurudza вне форума Ответить с цитированием
Старый 14.04.2012, 10:45   #3
litviak
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 19
По умолчанию

Спасибо большое. все работает
litviak вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритмы нахождения эйлерова цикла и гамильтонова цикла в графе. Necare Помощь студентам 0 15.11.2011 18:26
Поиск Эйлерова цикла в графе Danion Помощь студентам 3 22.05.2010 18:47
найти длину кратчайшего цикла в графе Petruha-nsk Общие вопросы C/C++ 4 13.05.2009 17:08
Поиск в графе Selebro Общие вопросы C/C++ 0 14.12.2008 17:06
Нахождение эйлерова цикла, косяк vendigo Общие вопросы C/C++ 1 22.11.2007 14:14