Pagini recente » Cod sursa (job #702337) | Cod sursa (job #751926) | Cod sursa (job #1507950) | Cod sursa (job #2151589) | Cod sursa (job #2536320)
#include <fstream>
using namespace std;
ifstream f ("castel.in");
ofstream g ("castel.out");
int n, m, a[153][153], cheie[153][153], fr[22503], rez;
int startx, starty, start, lg;
int di[4] = {1, 0, -1, 0};
int dj[4] = {0, 1, 0, -1};
pair < int, int > cu_cheie[22503];
bool gasit, ok, used[153][153];
void read ()
{
int i, j;
f >> n >> m >> start;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
f >> a[i][j];
}
bool valid (int i, int j)
{
if (i<1 || j<1 || i>n || j>m)
return false;
return true;
}
void calc ()
{
int i, j, aux = 0;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
aux ++;
cheie[i][j] = aux;
if (aux == start)
{
startx = i;
starty = j;
}
}
}
}
int main()
{
read();
calc();
fr[cheie[startx][starty]] = 1;
rez = 1;
lg ++;
cu_cheie[lg].first = startx;
cu_cheie[lg].second = starty;
used[startx][starty] = 1;
gasit = true;
int i, j, k, p, i_nou, j_nou;
while (gasit)
{
ok = true;
for (p=1; p<=lg; p++)
{
i = cu_cheie[p].first;
j = cu_cheie[p].second;
for (k=0; k<=3; k++)
{
i_nou = i + di[k];
j_nou = j + dj[k];
if (valid(i_nou, j_nou) && fr[a[i_nou][j_nou]] == 1)
{
if (!used[i_nou][j_nou])
{
rez ++;
used[i_nou][j_nou] = 1;
fr[cheie[i_nou][j_nou]] = 1;
lg ++;
cu_cheie[lg].first = i_nou;
cu_cheie[lg].second = j_nou;
ok = false;
}
}
}
}
if (ok)
gasit = false;
}
g << rez;
return 0;
}