Cod sursa(job #152846)

Utilizator pascu_iulianPascu Iulian pascu_iulian Data 9 martie 2008 20:52:27
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<iostream.h>
#include<fstream.h>

ifstream fin("castel.in");
ofstream fout("castel.out");

    //         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;        
fin>>m>>n>>poz;     //citim datele
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
  fin>>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
fout<<camere<<endl; 
return 0;
}