Pagini recente » Cod sursa (job #2289841) | infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #2871341) | Cod sursa (job #3213858) | Cod sursa (job #2640637)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("castel.in");
ofstream cout ("castel.out");
struct ura{
int x, y;
};
ura coada[25000];
vector <ura> lista[25000];
int ca[155][155];
int a[155][155];
int vc[25000];
int dirL[4] = {0, 1, 0, -1};
int dirC[4] = {1, 0, -1, 0};
int main()
{
int n, m, k, x0, y0, inc, sf;
cin >> n >> m >> k;
x0 = k / m + 1;
y0 = k % m;
if (!y0)
{
x0--;
y0 = m;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
inc = sf = 1;
coada[1].x = x0;
coada[1].y = y0;
ca[x0][y0] = 1;
while (inc <= sf)
{
int x = coada[inc].x;
int y = coada[inc].y;
inc++;
if (vc[x * m - m + y] == 0)
{
for (int i = 0; i < lista[x * m - m + y].size(); i++)
{
coada[++sf].x = lista[x * m - m + y][i].x;
coada[sf].y = lista[x * m - m + y][i].y;
}
vc[x * m - m + y] = 1;
}
for (int i = 0; i < 4; i++)
{
int xx = x + dirL[i];
int yy = y + dirC[i];
if (xx > 0 && yy > 0 && xx <= n && yy <= m && ca[xx][yy] == 0)
{
ca[xx][yy] = 1;
if (vc[a[xx][yy]] == 1)
{
coada[++sf].x = xx;
coada[sf].y = yy;
}
else
lista[a[xx][yy]].push_back({xx, yy});
}
}
}
cout << sf;
return 0;
}