Pagini recente » Cod sursa (job #1920152) | Cod sursa (job #931114) | Cod sursa (job #351383) | Cod sursa (job #1760963) | Cod sursa (job #1966469)
#include<fstream>
#include<vector>
#define f first
#define s second
using namespace std;
int n, m, k, i, j, ii, jj, iv, jv, d, sol, p, u, x;
int a[155][155], viz[155][155];
pair<int, int> c[155 * 155], ind[155 * 155], vec;
vector<int> v[155 * 155];
int di[4] = {-1, 1, 0, 0};
int dj[4] = {0, 0, -1, 1};
ifstream fin("castel.in");
ofstream fout("castel.out");
int main(){
fin>> n >> m >> k;
for(i = 1; i <= n; i++){
for(j = 1; j <= m; j++){
fin>> a[i][j];
ind[(i - 1) * m + j].f = i;
ind[(i - 1) * m + j].s = j;
}
}
p = u = 1;
c[1] = ind[k];
viz[ ind[k].f ][ ind[k].s ] = 1;
while(p <= u){
ii = c[p].f;
jj = c[p].s;
x = (ii - 1) * m + jj;
for(i = 0; i < v[x].size(); i++){
vec = ind[ v[x][i] ];
if(viz[vec.f][vec.s] == 0){
viz[vec.f][vec.s] = 1;
c[++u] = vec;
}
}
for(d = 0; d < 4; d++){
iv = ii + di[d];
jv = jj + dj[d];
if(viz[iv][jv] == 0 && iv > 0 && jv > 0 && iv <= n && jv <= m){
vec = ind[ a[iv][jv] ];
if(viz[vec.f][vec.s] == 1){
viz[iv][jv] = 1;
c[++u] = make_pair(iv, jv);
}
else{
v[ a[iv][jv] ].push_back((iv - 1) * m + jv);
}
}
}
p++;
}
for(i = 1; i <= n; i++){
for(j = 1; j <= m; j++){
sol += viz[i][j];
}
}
fout<< sol <<"\n";
return 0;
}