Cod sursa(job #92193)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 14 octombrie 2007 14:06:07
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream.h>
long a[155][155],N,M,L,b[425550],c[155][155];
long long nr=0;
void citire(){
ifstream fin("castel.in");
fin>>N>>M>>L;
for (int i=0;i<N;i++)
   for (int j=0;j<M;j++){
       fin>>a[i][j];
       c[i][j]=i*M+j+1;
       if (c[i][j]==L)
	  a[i][j]=-1;}
fin.close();
}
long long numarare(){
b[L]=1;
nr=0;
short k=1;
while (k){
k=0;
for (int i=0;i<N;i++)
   for (int j=0;j<M;j++)
       if (a[i][j]==-1){
	 if (b[a[i][j+1]]==1&&a[i][j+1]!=-1&&j<M-1){
	     b[c[i][j+1]]=1;
	     a[i][j+1]=-1;
	     k=1;}
	 if (b[a[i][j-1]]==1&&a[i][j-1]!=-1&&j>0){
	     b[c[i][j-1]]=1;
	     a[i][j-1]=-1;
	     k=1;}
	 if (b[a[i+1][j]]==1&&a[i+1][j]!=-1&&i<N-1){
	     b[c[i+1][j]]=1;
	     a[i+1][j]=-1;
	     k=1;}
	 if (b[a[i-1][j]]==1&&a[i-1][j]!=-1&&i>0){
	     b[c[i-1][j]]=1;
	     a[i-1][j]=-1;
	     k=1;}
       }
}
for (int t=0;t<N;t++)
   for (int r=0;r<M;r++)
      if (a[t][r]==-1)
	 nr++;
return nr;
}
int main(){
citire();
ofstream fout("castel.out");
fout<<numarare();
fout<<"\n";
fout.close();
return 0;
}