Mai intai trebuie sa te autentifici.
Cod sursa(job #152825)
Utilizator | Data | 9 martie 2008 20:27:56 | |
---|---|---|---|
Problema | Castel | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.32 kb |
#include<iostream.h>
#include<conio.h>
// varianta "if cam e descuiata vezi vecinii"
bool chei[22501]={0}; //declararile importante
long cam[151][151],camere=1;
int m,n;
int main()
{
int i,j;
long poz;
cin>>m>>n>>poz; //citim datele
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>cam[i][j];
int x,y; //aflam coordonatele camerei initiale
if(poz%n==0)
{ x=poz/n; y=n; }
else
{ x=poz/n+1; y=poz%n; }
chei[poz]=1; //adaugam cheia gasita la breloc :D
cam[x][y]=0; //nu mai e novoie de cheie pt accesul aici
bool g=1;
int vec_i[4]={-1,0,1,0};
int vec_j[4]={0,1,0,-1};
while(g)
{g=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++) //parcurgem matricea
if(cam[i][j]==0) // gasim o camera deschisa >> cercetam vecinii
for(int t=0;t<4;t++)
{ x=i+vec_i[t];
y=j+vec_j[t];
if(cam[x][y]!=0 && chei[cam[x][y]]==1) //daca camera e inchisa si avem cheia
{camere++;
int k=n*(x-1)+y; // numarul cheii gasite in camera
chei[k]=1; //cheia la breloc
cam[x][y]=0; //lasam usa deschisa ;D
g=1; //adica printesa nu a mers degeaba o tura
}//"inchidem" if-ul
}//"inchidem" vecinii
}//inchidem while-ul
cout<<camere<<endl;
getch();
return 0;
}