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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2015, 19:45   #1
DeadXipster
Новичок
Джуниор
 
Регистрация: 03.04.2015
Сообщений: 2
По умолчанию C++ графы

Из клетчатого листа бумаги вырезали некоторые клетки. На сколько частей распадется лист?

Входные данные
Клетка представлена символом '#', вырезанная клетка - сим-волом '.'.
Число строк и столбцов не превышает 500.

Выходные данные
Одно число - искомое количество частей.

Пример входных данных
#.###.##
##.#.###
###....#
##.#.###
#.###.##

Пример выходных данных
4
DeadXipster вне форума Ответить с цитированием
Старый 07.04.2015, 20:10   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
#include <fstream>
#include <vector>
#include <string>

const char
      BUSY = '0';

const char
      EMPTY = '#';

using namespace std;

void color_nghb(int x, int y, vector<vector<char> >& v)
{
	v[x][y] = BUSY;

	if (v[x + 1][y] == EMPTY) (color_nghb(x + 1, y, v));
	if (v[x - 1][y] == EMPTY) (color_nghb(x - 1, y, v));
	if (v[x][y + 1] == EMPTY) (color_nghb(x, y + 1, v));
	if (v[x][y - 1] == EMPTY) (color_nghb(x, y - 1, v));
}

int main()
{
	ifstream cin("input.txt");
	ofstream cout("output.txt");

	int n = 0, m = 0, cnt = 0;
	string s;
	vector<vector<char> > v(1, vector<char>(m + 2, BUSY));
	
	while (cin >> s)
	{
		n++;
		m = s.size();
		if (n == 1)
			v.push_back(vector<char>(m + 2, BUSY));

		vector<char> t(m + 2, BUSY);

		for (int j = 1; j <= m; j++)
			if (s[j-1] == EMPTY)
				t[j] = s[j-1];
		v.push_back(t);

	}

	v.push_back(vector<char>(m + 2, BUSY));

	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			if (v[i][j] == EMPTY)
			{
				color_nghb(i, j, v); cnt++;
			}

	cout << cnt;
}
Не?
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графы Aleksey93 Паскаль, Turbo Pascal, PascalABC.NET 6 07.06.2012 04:30
Графы DTroy Помощь студентам 0 24.11.2011 20:28
Графы STeM Помощь студентам 14 09.06.2010 09:32
графы delete Общие вопросы C/C++ 2 28.10.2009 21:31