Pagini recente » Cod sursa (job #588568) | Cod sursa (job #286878) | Cod sursa (job #360444) | Cod sursa (job #2285499) | Cod sursa (job #2224498)
#include <fstream>
#include <queue>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
pair<int,int>x;
queue<pair<int,int> >dq;
int n,m,k,i,j,l[30000],c[30000],v[151][151],r,v2[151][151],v3[151][151],nr,chei[30000];
int main() {
f>>n>>m>>k;
nr=1;
for(i=1; i<=n; i++) {
for(j=1; j<=m; j++) {
v[i][j]=nr;
v3[0][j]=1;
v3[i][0]=1;
v3[n+1][j]=1;
v3[i][m+1]=1;
if(v[i][j]==k) {
x=make_pair(i,j);
chei[k]=1;
dq.push(x);
}
nr++;
f>>v2[i][j];
}
}
r=1;
while(!dq.empty() && r==1) {
nr=0;
r=0;
while(!dq.empty()) {
l[++nr]=dq.front().first;
c[nr]=dq.front().second;
v3[l[nr]][c[nr]]=1;
chei[v[l[nr]][c[nr]]]=1;
dq.pop();
}
for(i=1; i<=nr; i++) {
if(l[i]>1 && chei[v2[l[i]-1][c[i]]]==1 && v3[l[i]-1][c[i]]==0) {
x=make_pair(l[i]-1,c[i]);
dq.push(x);
r=1;
}
if(l[i]<n && chei[v2[l[i]+1][c[i]]]==1 && v3[l[i]+1][c[i]]==0) {
x=make_pair(l[i]+1,c[i]);
dq.push(x);
r=1;
}
if(c[i]>1 && chei[v2[l[i]][c[i]-1]]==1 && v3[l[i]][c[i]-1]==0) {
x=make_pair(l[i],c[i]-1);
dq.push(x);
r=1;
}
if(c[i]<m && chei[v2[l[i]][c[i]+1]]==1 && v3[l[i]][c[i]+1]==0) {
x=make_pair(l[i],c[i]+1);
dq.push(x);
r=1;
}
if(v3[l[i]+1][c[i]]==0 or v3[l[i]-1][c[i]]==0 or v3[l[i]][c[i]+1]==0 or v3[l[i]][c[i]-1]==0) {
x=make_pair(l[i],c[i]);
dq.push(x);
}
}
}
nr=0;
for(i=1; i<=n; i++) {
for(j=1; j<=m; j++) {
if(v3[i][j]==1) {
nr++;
}
}
}
g<<nr<<'\n';
return 0;
}