Pagini recente » Cod sursa (job #2458561) | Cod sursa (job #2666043) | Cod sursa (job #155271) | Cod sursa (job #900965) | Cod sursa (job #1646679)
#include <iostream>
#include<fstream>
#include<queue>
using namespace std;
int n,m,i,j,k,nr,x,y,i0,j0,d,ok,n1;
bool v[22501];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
struct camera
{
bool ok;
int x;
}a[151][151];
bool OK(int i,int j)
{
if(i<1||j<1||n<i||m<j)return 0;
if(a[i][j].ok)return 0;
return 1;
}
queue <pair<int,int> >coada,coada1;
int main()
{
ifstream f("castel.in");
f>>n>>m>>k;for(i=1;i<=n;i++)for(j=1;j<=m;j++)f>>a[i][j].x;
i0=(k-1)/m+1;
j0=(k-1)%m+1;
nr=1;v[k]=1;
if(!v[a[i0][j0].x]){v[a[i0][j0].x]=1;nr++;}
coada.push(make_pair(i0,j0));
a[i0][j0].ok=1;
ok=1;
while(ok)
{
ok=0;
for(i=1;i<=n;i++)for(j=1;j<=m;j++)a[i][j].ok=0;
coada.push(make_pair(i0,j0));
a[i0][j0].ok=1;ok=1;n1=1;
while(!coada.empty())
{
x=coada.front().first;
y=coada.front().second;
coada.pop();
for(d=0;d<4;d++)
{
i=x+dx[d];j=y+dy[d];k=a[i][j].x;
if(OK(i,j)&&v[k])
{
coada.push(make_pair(i,j));
k=(i-1)*m+j;v[k]=1;
a[i][j].ok=1;
n1++;
}
}
}
if(n1>nr){nr=n1;ok=1;}
else ok=0;
}
ofstream g("castel.out");
g<<nr;
g.close();
return 0;
}