
29.05.2007, 23:12
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Вот практически рабочий вариант:
Код:
#include <fstream.h>
char c[202][202];
typedef arr, byte[40000];
unsigned short first,last;
int n,m,i,j,coun;
arr *ii, *jj;
void put(int i, int j)
{
if (c[i][j] == '#')
{
last++;
ii[last] = i;
jj[last] = j;
c[i][j] = '.';
}
}
void get(int *i, int *j)
{
*i = ii[first];
*j = jj[first];
first++;
}
void paint(int i, int j)
{
first = 1;
last = 0;
put(i,j);
while (first<=last)
{
get(&i,&j);
put(i+1,j);
put(i-1,j);
put(i,j+1);
put(i,j-1);
}
}
void main()
{
ii = new arr;
jj = new arr;
ifstream input("beds.in");
ofstream output("beds.out");
input >> n;
input >> m;
for (i = 0; i <= n+1; i++)
for (j = 0; j <= m+1; j++)
c[i][j] = '.';
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
input >> c[i][j];
}
coun = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (c[i][j] == '#')
{
paint(i,j);
coun++;
}
/* delete[] ii;
delete[] jj; */
output << coun;
}
Где-то с указателями бага (ошибка при освобождении), но ответ вроде правильный...
|
|
|