Pagini recente » Cod sursa (job #2531154) | Cod sursa (job #2032772) | Cod sursa (job #969537) | Cod sursa (job #971112) | Cod sursa (job #1971863)
/**************************************************************/
//program preluat de la Mihai Bendeac ONI2015 si modificat
#include <iostream>
#include <fstream>
#define NMax 155
//#define NMax 5
using namespace std;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int N,M,K,ok,nr,nr_accesibile,k;
bool cheie[NMax*NMax];
int A[NMax][NMax],B[NMax][NMax];
int i,j;
//int Vx,Vy;
int Cx[NMax*NMax],Cy[NMax*NMax];
int l9,c9;
struct locatie
{
int x,y;
}start;
void Citire()
{
ifstream f("castel.in");
f>>N>>M>>K;
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
{
nr++;
f>>A[i][j]; //A[] tine minte cheile si se transforma in -1 daca e accesibila camera
B[i][j]=nr; //B tine minte nr. camerei
}
}
void Afisare()
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
cout<<A[i][j]<<' ';
cout<<endl;
}
}
//inline bool Posibil(int x,int y)
//{
// if(x>=1 && y>=1 && x<=N && y<=M)
// return true;
// return false;
//}
void calcul()
{
//cheie[A[start.x][start.y]]=1;
start.x=K/M; //K e nr. camerei de start
start.y=K%M;
if(start.y>0) ++start.x;
if(start.y==0) start.y=M;
cheie[B[start.x][start.y]]=1;
ok=1,nr=0,nr_accesibile=1;
A[start.x][start.y]=-1;
Cx[0]=start.x;
Cy[0]=start.y;
while(ok==1)
{
ok=0;
for(i=0;i<=nr;i++)
{
for(k=0;k<4;k++)
{
l9= Cx[i]+dx[k];
c9= Cy[i]+dy[k];
if(A[l9][c9]!=-1)//daca nu e deja deschisa camera
if(cheie[A[l9][c9]]==1) //daca este cheie pt camera respectiva
{
nr++;
Cx[nr]=l9;
Cy[nr]=c9;
A[l9][c9]=-1; //marcam o camera accesibila
cheie[B[l9][c9]]=1; //gasesc o cheie cu numarul camerei deschise
nr_accesibile++;
ok=1;
}
}
}
}
}
int main()
{
Citire();
calcul();
ofstream g("castel.out");
g<<nr_accesibile;
//Afisare();
}
/**************************************************************/