Pagini recente » Cod sursa (job #2366627) | Cod sursa (job #554821) | Cod sursa (job #1399598) | Cod sursa (job #1169256) | Cod sursa (job #2347087)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
vector <int> v[25005];
int fr[22501],a[151][151],x,y,i,j,n,m,k,b[151][151],q[22501][2],S;
int dx[] = {0,-1,0,1,0} , dy[]={0,0,1,0,-1},X,Y;
void poz(int code,int &x,int &y){
if(code%m==0){
x=code/m;
y=m;
}
else {
x=code/m+1;
y=code%m;
}
}
int coada(int x, int y){
int p=0,u=0;
q[0][0]=x;
q[0][1]=y;
b[x][y]=1;
while(p<=u){
int l=q[p][0];
int c=q[p][1];
p++;
for(int k=1;k<=4;k++){
int ln=l+dx[k];
int cn=c+dy[k];
if(ln>=1&&ln<=n&&cn>=1&&cn<=m){
if(fr[a[ln][cn]]==1&&b[ln][cn]==0){
q[++u][0]=ln;
q[u][1]=cn;
b[ln][cn]=2;
fr[(ln-1)*m+cn]=1;
int nr=v[(ln-1)*m+cn].size()-1;
while(nr>=0){
poz(v[(ln-1)*m+cn][nr],X,Y);
q[++u][0]=X;
q[u][1]=Y;
b[X][Y]=2;
fr[(X-1)*m+Y]=1;
nr--;
}
}
else if(fr[a[ln][cn]]==0&&b[ln][cn]==0){
b[ln][cn]=1;
v[a[ln][cn]].push_back((ln-1)*m+cn);
}
}
}
}
return u+1;
}
int main()
{ f>>n>>m>>k;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>a[i][j];
poz(k,x,y);
fr[k]=1;
g<<coada(x,y);
return 0;
}