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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 18:52   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию Задача о минимальном наборе станций

Добрый день. Необходимо решить задачу методом перебора: дана матрица где строки станции, абоненты столбцы
пример:
0 1
1 0
т.е первая станция покрывает второго абонента, а вторая первого абонента. Необходимо методом перебора найти минимальное покрытие. Я реализовала жадный алгоритм, который смотрит кто покрывает больше и так далее.
Вот код:
Код:
// cover_bust.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
/*====================================================================================================
				описание данных
====================================================================================================*/
int arr[100][100];	//матрица покрытия
int pocr[100];	//сколько каждая станция покрывает абонентов
int res[100];	//наибольшее покрытие наименьшим количеством станций
int count_res=0;	//количество станций в результате
int count_view=0;	//количество рассмотреных станций
int n,m;	//количество строк (станции) количетсво аобонентов(столбцы)

/*====================================================================================================
				процедуры и функции
====================================================================================================*/
int max_pocr()	//находим какая станция покрывает больше абонентов: номер станции
{
	int tmp=0;
	for (int i=1;i<n;i++)
		if (pocr[i]>pocr[tmp]) tmp=i;
	return tmp;
}

/*====================================================================================================
				главная программа
====================================================================================================*/
int _tmain(int argc, _TCHAR* argv[])
{
/*====================================================================================================
				ввод данных
====================================================================================================*/
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
	scanf("%d",&n);
	scanf("%d",&m);
	
	for (int i=0;i<n;i++)
	{
		int tmp=0;
		for(int j=0;j<m;j++)
		{
			scanf("%d",&arr[i][j]);
			if (arr[i][j]==1) tmp++;	//подсчет того сколько абонентов покрывает станций
		}
		pocr[i]=tmp;	// заполняем массив покрытия
	}

/*====================================================================================================
				перебор
====================================================================================================*/
	int max_index=0;
	printf("stations: \n");
	while((count_view!=n) && (count_res!=m))	// пока все не просмотрели или пока все не учли	
	{
		max_index=max_pocr();	// находим покрывающую больше всего
		printf("%d ",max_index);	//выводим покрывающую больше
		count_view++;	// отмечаем что просмотрели
		for(int j=0;j<m;j++)
		{
			if(arr[max_index][j]==1)	//если в строке 1 то бежим по столбцы чтобы откоректировать массив покрытьий и обновляем его
			{
				count_res++;
				res[j]=1;
				for(int i=0;i<n;i++)
				{
					if(arr[i][j]==1)
					{
						pocr[i]=pocr[i]-1;
						arr[i][j]=0;
					}
				}
			}
		}
	}
/*====================================================================================================
				вывод результата перечисление тех абонентов которые покрыты
====================================================================================================*/
	printf("\n spisok subscribers: \n");
	for(int i=0;i<m;i++)
		printf("%d ",res[i]);

	return 0;
}
Нужен перебор, не понимаю как реализовать?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена слов при наборе medved6216 Общие вопросы Delphi 2 13.09.2010 17:54
Рандомные звуки при наборе текста Shouldercannon Общие вопросы Delphi 8 07.01.2010 22:37
соединение 3 рабочих станций через последовательные порты allaur Помощь студентам 0 14.11.2009 12:55
Подстановка значений при наборе kopoba БД в Delphi 4 02.06.2009 10:34
Зависание при наборе определенных слов mus-chek Microsoft Office Word 12 01.11.2008 08:20