Хе. Помню в детстве нарешался я таких задачек )) Но все равно люблю их, и именно такое программирование мне до сих пор больше всего нравится. Всмысле именно разработка алгоритмов, а не работа со всякими там готовыми компонентами, разработка GUI и тому подобная скукотища )
По делу: обычная "закраска". Решил тряхнуть стариной, результат ниже (на C++)
Код:
#include<iostream> #include<fstream> using namespace std;
int wall[4][16]={0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1, 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1}; int addX[4]={0,1,0,-1},addY[4]={-1,0,1,0}; int roomsAmount=0,xMax,yMax,roomSize; int **dirMatr,**fillMatr; int *queueX,*queueY;
void fReadInput(void){ fstream in; int y,x; in.open("input.txt",ios::in); in>>yMax>>xMax; dirMatr = new int* [yMax+1]; for(y=0;y<=yMax;y++) dirMatr[y]=new int [xMax+1]; fillMatr = new int* [yMax+1]; for(x=0;x<=yMax;x++) fillMatr[x]=new int [xMax+1]; queueX = new int [yMax*xMax+1]; queueY = new int [yMax*xMax+1]; for(y=1;y<=yMax;y++) for(x=1;x<=xMax;x++) {in>>dirMatr[y][x]; fillMatr[y][x]=0;} in.close();}
Немного корявенько т.к. набросал по-быстрому, но суть должна быть понятна. Тебе в принципе нужна только функция fFillRooms, алгоритм там простой - ищем незакрашенную клетку, и качинаем от нее закрашивать. Короче "закраска", что тут еще говорить. Размеры комнат вывожу во временный файл, т.к. неохота связываться с векторами (кол-во комнат ведь заранее неизвестно). Ну или можно сразу выводить в итоговый файл, а потом в начало файла добавить кол-во комнат, но я с файлами в C++ не очень хорошо работаю...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения