Pagini recente » Cod sursa (job #43601) | Cod sursa (job #2642961) | Cod sursa (job #1442530) | Cod sursa (job #1979464) | Cod sursa (job #2567913)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
const int DMAX = 150;
struct pozitie
{
short x, y;
pozitie(int x = 0, int y = 0)
{
this->x = x;
this->y = y;
}
};
int M, N, K, nrCamere;
int H[DMAX + 2][DMAX + 2];
bool Key[DMAX * DMAX + 1];
bool viz[DMAX + 1][DMAX + 1];
pozitie Q[DMAX * DMAX + 1];
pozitie d[4] = {{0, -1}, {-1, 0}, {1, 0}, {0, 1}};
void citire()
{
f >> M >> N >> K;
for(int i = 1; i <= M; i++)
for(int j = 1; j <= N; j++)
f >> H[i][j];
}
pozitie pozCam(int nrCamera)
{
int xs = nrCamera / N;
if(nrCamera % N != 0)
xs++;
int ys = nrCamera - (xs - 1) * N;
return pozitie(xs, ys);
}
inline int nrCam(pozitie poz)
{
return (poz.x - 1) * N + poz.y;
}
void Lee()
{
pozitie crt, vec;
bool camNoua;
int u = 1;
Key[K] = 1;
Q[1] = pozCam(K);
do
{
camNoua = 0;
for(int i = 1; i <= u; i++)
{
crt = Q[i];
for(int j = 0; j < 4; j++)
{
vec = pozitie(crt.x + d[j].x, crt.y + d[j].y);
if(H[vec.x][vec.y] != 0 && Key[H[vec.x][vec.y]] == 1)
if(viz[vec.x][vec.y] == 0)
{
Key[nrCam(vec)] = 1;
viz[vec.x][vec.y] = 1;
Q[++u] = vec;
camNoua = 1;
nrCamere++;
}
}
}
}
while(camNoua == 1);
}
int main()
{
citire();
Lee();
g << nrCamere;
return 0;
}