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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2010, 09:48   #1
Kobe
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 23
По умолчанию Задача об источниках и потребителях

Решить задачу об источниках и потребителях, сведя ее к задаче построения максимального потока в транспортной сети и используя первый алгоритм построения максимального потока

Программа не работает. запускается и тут же закрывается

Код:
#include <stdio.h>

#define MAX 110
#define inf 1e9

int x;
int y;
int m;
int tmp;
int n;
int xi;
int yi;
int cap;
int c[MAX][MAX];
int flow[MAX][MAX];
int add_g[MAX][MAX];
int chain[MAX];
int chain_it;
bool used[MAX];

template<typename T>
inline T min(T a,T b) {return (a<b)?a:b;}

bool dfs(int x)
{
	used[x] = 1;
	chain[chain_it++] = x;

	if(x == n)
		return true;

	for(int i = 0;i <= n;i++)
		if(add_g[x][i] != inf && !used[i])
		{
			bool res = dfs(i);
			if(res) return true;
		}

	chain_it--;
	return false;
}

int main()
{
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);

	scanf("%d %d %d",&x,&y,&m);

	for(int i = 0;i < m;i++)
	{
		scanf("%d %d %d",&xi,&yi,&cap);
		c[xi][yi+x] = cap;
	}

	for(int i = 0;i < x;i++)
	{
		scanf("%d",&tmp);
		c[0][i+1] = tmp;
	}

	for(int i = 0;i < y;i++)
	{
		scanf("%d",&tmp);
		c[x+i+1][x+y+1] = tmp;
	}

	n = x+y+1;

	printf("Транспортная сеть:\n");
	for(int i = 0;i <= n;i++,printf("\n"))
		for(int j = 0;j <= n;j++)
			printf("%d ",c[i][j]);

	while(true)
	{
		for(int i = 0;i <= n;i++)
			used[i] = 0;

		chain_it = 0;

		for(int i = 0;i <= n;i++)
			for(int j = 0;j <= n;j++)
				add_g[i][j] = inf;

		for(int i = 0;i <= n;i++)
			for(int j = i+1;j <= n;j++)
			{
				add_g[i][j] = (flow[i][j]< c[i][j])?0:inf;
				add_g[j][i] = (flow[i][j] > 0)?0:inf;
			}

		if(!dfs(0))
			break;

		int for_add = inf;
		for(int i = 0;i < chain_it-1;i++)
			for_add = min(for_add,c[chain[i]][chain[i+1]]-flow[chain[i]][chain[i+1]]);
		for(int i = 0;i < chain_it-1;i++)
			flow[chain[i]][chain[i+1]] += for_add;
	}

	printf("Поток:\n");
	for(int i = 0;i <= n;i++,printf("\n"))
		for(int j = 0;j <= n;j++)
			printf("%d ",flow[i][j]);

	printf("Произведено:");
	for(int i = 1;i <= x;i++)
		printf("%d ",flow[0][i]);

	
	printf("\nПотреблено:");
	for(int i = x+1;i <= x+y;i++)
		printf("%d ",flow[i][n]);

	return 0;
}
Kobe вне форума Ответить с цитированием
Старый 29.06.2010, 15:07   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

И зачем столько постов? Это не чат - это форум, есть такая кнопка, которая ПРАВКА называется.
То что она закрывается, так это из-за отсутствия задержки. Поставь перед return0 - getch(); (#include <conio.h>). Правильность алгоритма не смотрел, ибо даже не известно что такое input.txt/output.txt
eoln вне форума Ответить с цитированием
Старый 29.06.2010, 17:00   #3
Kobe
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 23
По умолчанию

Цитата:
И зачем столько постов? Это не чат - это форум, есть такая кнопка, которая ПРАВКА называется.
То что она закрывается, так это из-за отсутствия задержки. Поставь перед return0 - getch(); (#include <conio.h>). Правильность алгоритма не смотрел, ибо даже не известно что такое input.txt/output.txt
Извини пожалуйста за мою тупость. input.txt/output.txt это текстовые файлы, в которых должна сохраниться полученная информация.

Не могли бы вы написать код полностью как должно быть. У меня что-то не получается. Выдает ошибку. Как правильно создать задержку. Заранее благодарю.

Еще раз прошу подправте мою программу, чтобы она запускалась.

Последний раз редактировалось Stilet; 30.06.2010 в 09:31.
Kobe вне форума Ответить с цитированием
Старый 01.07.2010, 16:48   #4
Kobe
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 23
По умолчанию

Все таки ответа нет. Помогите кто может. Еще раз прошу, переделайте код чтобы он работал. У меня не запускается. eoln написал как, но скорее всего я делаю все неправильно.
Kobe вне форума Ответить с цитированием
Старый 01.07.2010, 17:21   #5
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Kobe, запускается твоя прога. И работает. Вхолостую. И что за ересь ты написал насчёт файлов input.txt/output.txt. У них названия говорящие, и если output.txt подходит под определение файла, в котором полученная информация сохраняется, то input.txt никак не лезет. Из этого файла информация получается, а затем обрабатывается.
И да, извиняю, только если вы хотите, чтобы вам помогли, то вам необходимо описать структуру входного файла (уж бог с ним, с выходным), либо хотя бы скинуть нормальную версию входного файла сюда... (хотя, что там что тоже мало у кого желание возникнет, поэтому лучше опишите структуру).
Чтобы не закрывалась можешь дописать в самом конце перед return: system("pause");

Последний раз редактировалось mMAg; 01.07.2010 в 17:24.
mMAg вне форума Ответить с цитированием
Старый 01.07.2010, 18:12   #6
Kobe
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 23
По умолчанию

Цитата:
Чтобы не закрывалась можешь дописать в самом конце перед return: system("pause");
Делаю как вы сказали. Выделяет красным system("pause")

Правильно ли вообще я сделал

Код:
	printf("\nÏîòðåáëåíî:");
	for(int i = x+1;i <= x+y;i++)
		printf("%d ",flow[i][n]);
                      system("pause")
 	
return 0;
}
Kobe вне форума Ответить с цитированием
Старый 01.07.2010, 18:20   #7
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Kobe, тебя вообще учили, что после каждого оператора нужно ; ставить? функция system, знаешь ли, не исключение.
mMAg вне форума Ответить с цитированием
Старый 02.07.2010, 06:56   #8
Kobe
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 23
По умолчанию

Цитата:
тебя вообще учили, что после каждого оператора нужно ; ставить? функция system, знаешь ли, не исключение.
Учили. Вставил. Все равно не работает. Пишет
Цитата:
Build
[C++ Error] main.cpp(116): E2268 Call to undefined function 'system'
Kobe вне форума Ответить с цитированием
Старый 02.07.2010, 09:51   #9
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

Цитата:
Сообщение от Kobe Посмотреть сообщение
Учили. Вставил. Все равно не работает. Пишет
добавь в начале

Код:
#include <stdlib.h>
Snejnaya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на VB 6.0 Maxs Помощь студентам 3 27.05.2009 16:57
Задача Baby33 Помощь студентам 2 27.01.2009 13:20