Pagini recente » Cod sursa (job #385699) | Cod sursa (job #779878) | Cod sursa (job #655688) | Cod sursa (job #1742789) | Cod sursa (job #3337602)
#include <fstream>
using namespace std;
const int DMAX=150;
struct pozitie{
short int x,y;
};
int M, N, K, nrCamere;
int H[DMAX+2][DMAX+2];
bool Key[DMAX*DMAX+1];
bool viz[DMAX+1][DMAX+1];
pozitie Q[DMAX*DMAX+1];
pozitie d[4]={{0,-1},{-1,0},{1,0},{0,1}};
ifstream f("castel.in");
ofstream g("castel.out");
void citire(){
f >> M >> N >> K;
for(int i=1;i<=M;i++)
for(int j=1;j<=N;j++)
f >> H[i][j];
}
pozitie pozCam(int nrCamera){
pozitie poz;
poz.x=nrCamera/N;
if(nrCamera%N!=0) poz.x++;
poz.y=nrCamera-(poz.x-1)*N;
return poz;
}
inline int nrCam(pozitie poz){
return (poz.x-1)*N+poz.y;
}
void Lee(){
pozitie crt,vec;
bool camNoua;
int u=1;
Key[K]=1;
Q[1]=pozCam(K);
do{
camNoua=0;
for(int i=1;i<=u;i++){
crt=Q[i];
for(int j=0;j<4;j++){
vec.x=crt.x+d[j].x;
vec.y=crt.y+d[j].y;
if(viz[vec.x][vec.y]==0 && Key[H[vec.x][vec.y]]==1){
Key[nrCam(vec)]=1;
viz[vec.x][vec.y]=1;
Q[++u]=vec;
camNoua=1;
nrCamere++;
}
}
}
}while(camNoua!=0);
}
int main()
{
citire();
Lee();
g << nrCamere;
f.close();
g.close();
return 0;
}