Pagini recente » Cod sursa (job #156924) | Cod sursa (job #2130179) | Cod sursa (job #1277772) | Cod sursa (job #166679) | Cod sursa (job #2268909)
#include <iostream>
#include <queue>
#include <fstream>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
const short vi[5] = {-1, 0, 1, 0}, vj[5] = {0, 1, 0, -1};
int a[155][155];
int n, m, k;
bool ok;
int nrCam = 1;
bool chei[22505];
queue<pair<int, int > > Q;
void lee()
{
int Starti=(k-1)/m+1;
int Startj=(k-1)%m+1;
a[Starti][Startj] = -1;
Q.push(make_pair(Starti, Startj));
int Condi = 0, Condj = 0;
ok = 0;
while(!Q.empty())
{
int i = Q.front().first;
int j = Q.front().second;
if(i == Condi && j == Condj)
{
if(ok == 0)
return;
else
{
Condi = 0;
Condj = 0;
ok = 0; }
}
int nrMinus = 0;
Q.pop();
for(int v = 0; v<4; v++)
{
int iv = i+vi[v];
int jv = j+vj[v];
int camera = (iv-1)*m+jv;
if(a[iv][jv] != -1)
{
if(chei[a[iv][jv]])
{
a[iv][jv] = -1;
if(chei[camera] == 0)
{
ok = 1;
nrCam++;
chei[camera] = 1;
}
Q.push(make_pair(iv, jv));
nrMinus++;
}
}
else
nrMinus++;
}
if(nrMinus<4)
{
if(Condi == 0)
{
Condi = i;
Condj = j;
}
Q.push(make_pair(i, j));
}
}
}
void bordare()
{
for(int i = 0; i<=n; i++)
{
a[i][0] = -1;
a[i][m+1] = -1;
}
for(int j = 1; j<=m; j++)
{
a[0][j] = -1;
a[n+1][j] = -1;
}
}
void citire()
{
f>>n>>m>>k;
chei[k] = 1;
chei[0] = 1;
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=m; j++)
{
f>>a[i][j];
}
}
}
void reset()
{
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=m; j++)
{
if(a[i][j] == -1)
a[i][j] = 0;
}
}
}
void rez()
{
lee();
g<<nrCam;
}
void afis()
{
for(int i = 0; i<=n+1; i++)
{
for(int j = 0; j<=m+1; j++)
{
g<<a[i][j]<<" ";
}
g<<"\n";
}
}
int main()
{
citire();
bordare();
//afis();
rez();
return 0;
}