Pagini recente » Cod sursa (job #1294717) | Cod sursa (job #2573262) | Cod sursa (job #2332176) | Cod sursa (job #258939) | Cod sursa (job #2577973)
//#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("castel.in");
ofstream cout("castel.out");
queue <int> q;
int diri[]={0,0,1,-1};
int dirj[]={1,-1,0,0};
int v[200][200],find_cheie[200][200],n,m,viz[200][200],ajuns[200][200];
vector<pair<int,int> > ceva[25000];
pair<int,int> coord(int k){
int a,b;
if(k%m==0){
b=m;
a=k/m;
}
else{
b=k%m;
a=k/m+1;
}
return make_pair(a,b);
}
int cord(int a,int b){
if(b==m){
return a*m;
}
else
return (a-1)*m+b;
}
int main()
{
int k;
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>v[i][j];
ceva[v[i][j]].push_back(make_pair(i,j));
}
}
int a,b;
if(k%m==0){
b=m;
a=k/m;
}
else{
b=k%m;
a=k/m+1;
}
q.push(k);
int contor=0;
while(q.empty()==false){
int x=q.front();
q.pop();
a=coord(x).first;
b=coord(x).second;
if(viz[a][b]==1)
continue;
//cout<<a<<" "<<b<<"\n";
contor++;
viz[a][b]=1;
for(auto u:ceva[x]){
find_cheie[u.first][u.second]=1;
if(ajuns[u.first][u.second]>0){
q.push(cord(u.first,u.second));
}
}
for(int i=0;i<4;i++){
ajuns[a+diri[i]][b+dirj[i]]++;
if(find_cheie[a+diri[i]][b+dirj[i]]==1 and ajuns[a+diri[i]][b+dirj[i]]==1){
q.push(cord(a+diri[i],b+dirj[i]));
}
}
}
cout<<contor;
return 0;
}