Pagini recente » CeiMaiMariOlimpicari: Runda #1 | Cod sursa (job #1450718) | Cod sursa (job #404370) | Cod sursa (job #232795) | Cod sursa (job #1048053)
#include<fstream>
using namespace std;
int n,m,k;
int v[155][155];
int vtf[155][155];
int key[22505];
int v1[22505],k1;
int v2[22505],k2;
void wtf(int a)
{
int x=a/m,y=a%m;
if (x-1>-1)
if (vtf[x-1][y]>-2)
if (key[v[x-1][y]])
{
vtf[x-1][y]=-2;
v1[k1++]=(x-1)*m+y;
key[(x-1)*m+y]=1;
}
else
if (vtf[x-1][y]>-1)
{
vtf[x-1][y]=-1;
v2[k2++]=(x-1)*m+y;
}
if (x+1<n)
if (vtf[x+1][y]>-2)
if (key[v[x+1][y]])
{
vtf[x+1][y]=-2;
v1[k1++]=(x+1)*m+y;
key[(x+1)*m+y]=1;
}
else
if (vtf[x+1][y]>-1)
{
vtf[x+1][y]=-1;
v2[k2++]=(x+1)*m+y;
}
if (y-1>-1)
if (vtf[x][y-1]>-2)
if (key[v[x][y-1]])
{
vtf[x][y-1]=-2;
v1[k1++]=x*m+y-1;
key[x*m+y-1]=1;
}
else
if (vtf[x][y-1]>-1)
{
vtf[x][y-1]=-1;
v2[k2++]=x*m+y-1;
}
if (y+1<m)
if (vtf[x][y+1]>-2)
if (key[v[x][y+1]])
{
vtf[x][y+1]=-2;
v1[k1++]=x*m+y+1;
key[x*m+y+1]=1;
}
else
if (vtf[x][y+1]>-1)
{
vtf[x][y+1]=-1;
v2[k2++]=x*m+y+1;
}
}
int main()
{
ifstream f("castel.in");
ofstream g("castel.out");
int i,j;
f>>n>>m>>k;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
{
f>>v[i][j];
v[i][j]--;
}
k--;
key[k]=1; v1[0]=k; k1=1; k2=0; i=0; j=0;
vtf[k/m][k%m]=-2;
while (i<k1 || j<k2)
{
if (i<k1)
{
wtf(v1[i]);
i++;
}
else
{
if (key[ v[v2[j]/m][v2[j]%m] ])
{
v1[k1++]=v2[j];
vtf[v2[j]/m][v2[j]%m]=-2;
key[v2[j]]=1;
}
j++;
}
}
int s=0;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
if (vtf[i][j]==-2)
s++;
g<<s;
return 0;
}