Pagini recente » Cod sursa (job #1606318) | Cod sursa (job #2259064) | Cod sursa (job #1327315) | Cod sursa (job #2183520)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
struct elem{
int l, c;
}nr[23001];
struct Directii{
int l,c;
}D[4]={{-1,0},{0,1},{1,0},{0,-1}};
int a[151][151],b[151][151];
int nrc,n,m,k,i0,j0,nrcamera;
bool key[23001];
bool ap[151][151];
bool verif(int i, int j){
if(i<=0 || i>n || j<=0 || j>m) return 0;
return 1;
}
void Lee_Castel(int i0, int j0){
elem x,y;
int lv, cv;
x.l=i0;
x.c=j0;
int k=0;
nr[++k]=x;
key[b[i0][j0]]=1;
ap[i0][j0]=1;
bool ok=1;
while(ok==1){
ok=0;
for(int i=1; i<=k; ++i) {
for(int d=0; d<4; ++d){
lv=nr[i].l+D[d].l;
cv=nr[i].c+D[d].c;
if(verif(lv, cv)){
if(key[a[lv][cv]]){
if(!ap[lv][cv]){
++nrc;
ok=1;
x.l=lv; x.c=cv;
key[b[lv][cv]]=1;
ap[lv][cv]=1;
nr[++k]=x;
}
}
}
}
}
}
}
int main(){
f>>n>>m>>k;
for(int i=1; i<=n; ++i){
for(int j=1; j<=m; ++j){
f>>a[i][j];
b[i][j]=++nrcamera;
if(b[i][j]==k) i0=i, j0=j;
}
}
nrc=1;
elem y;
y.l=1; y.c=1;
Lee_Castel(i0, j0);
g<<nrc<<"\n";
return 0;
}