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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2015, 20:27   #1
FIDE
Заблокирован
 
Регистрация: 02.08.2014
Сообщений: 30
Радость Несложная задача на поиск в ширину

Здравствуйте. Есть задачка не очень сложная на поиск в ширину.
http://codeforces.com/contest/602/problem/C
Решение задачи заключается в том что один путь идет прямо из вершины 1 в вершину N("для любой пары различных городов x и y между ними есть двунаправленная автомобильная дорога тогда и только тогда, когда между ними нет железнодорожного перегона") и нам не нужно думать о том чтобы пути не пересекались. В итоге нужно по сути просто написать BFS. У меня есть код но к сожалению на одном тесте не проходит из-за превышения лимита памяти.
Код:
#include <iostream>
#include <queue>

using namespace std;

struct path
{
	int v,cost;
};

int main()
{
	int n,m;
	cin>>n>>m;
	vector < vector <bool> > a(n,vector<bool>(n,false));
	for (int i=0;i<m;i++)
	{
		int x,y;
		cin>>x>>y;
		a[x-1][y-1]=true;a[y-1][x-1]=true;
	}
	if (a[0][n-1])
	for (int i=0;i<n;i++)
	 for (int j=0;j<n;j++) a[i][j]=!a[i][j];
	queue <path> q;
	q.push({0,0});
	vector <bool> used(n,false);
	int res=-1;
	while (!q.empty())
	{
		path k=q.front();
		q.pop();
		if (k.v==n-1)
		{
			res=k.cost;
			break;
		}
		used[k.v]=true;
		for (int i=0;i<n;i++)
		 if (a[k.v][i] && !used[i])	q.push({i,k.cost+1});	
	}
	cout<<res;
}
Вроде должно вложиться по памяти. Подскажите, что не так. Спасибо.

Последний раз редактировалось FIDE; 26.11.2015 в 00:43.
FIDE вне форума Ответить с цитированием
Старый 26.11.2015, 20:59   #2
FIDE
Заблокирован
 
Регистрация: 02.08.2014
Сообщений: 30
По умолчанию

Неужели никто не знает в чем проблема?
FIDE вне форума Ответить с цитированием
Старый 26.11.2015, 21:35   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я в ширь решать такие задачки не умею
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2015, 23:59   #4
FIDE
Заблокирован
 
Регистрация: 02.08.2014
Сообщений: 30
По умолчанию

Да задача-то решена фактически, надо только с памятью придумать что-то. Хотя я до сих пор не понимаю как я мог превысить ограничения памяти.
FIDE вне форума Ответить с цитированием
Старый 27.11.2015, 01:03   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ни разу не решена.
Poma][a вне форума Ответить с цитированием
Старый 27.11.2015, 01:21   #6
FIDE
Заблокирован
 
Регистрация: 02.08.2014
Сообщений: 30
По умолчанию

Спасибо Капитан Понятно что раз на тесте не проходит то не решена, но лучше бы ты что-то по теме написал...

Или лучше вообще пройди мимо этой темы...

Последний раз редактировалось Stilet; 27.11.2015 в 10:06.
FIDE вне форума Ответить с цитированием
Старый 27.11.2015, 01:55   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Да пожалста.
Код:
if (a[k.v][i] && !used[i]) { q.push({ i,k.cost + 1 }); used[i] = true; }
Poma][a вне форума Ответить с цитированием
Старый 27.11.2015, 15:59   #8
FIDE
Заблокирован
 
Регистрация: 02.08.2014
Сообщений: 30
По умолчанию

Точно! Надо внимательнее мне быть... Спасибо огромное.
FIDE вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одна несложная задача MetallDoctor Общие вопросы C/C++ 10 04.04.2013 09:17
Несложная задача С++ OldUnion Общие вопросы C/C++ 0 12.10.2012 19:40
Несложная задача на масив. Gordan007 Visual C++ 2 20.11.2011 01:51
Несложная задача на Паскале. WitaliG Помощь студентам 2 25.11.2010 18:48
Vba If Then несложная задача HelperAwM Microsoft Office Word 6 20.09.2010 23:44