Cod sursa(job #74226)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 24 iulie 2007 12:20:49
Problema Castel Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream.h>
int a[150][150],N,M,L,b[12500],c[150][150];
long long nr;
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;}
fin.close();
}
long long numarare(){
for (int u=0;u<N;u++)
  for (int j=0;j<M;j++)
     if (c[u][j]==L){
	 a[u][j]=-1;
	 b[L]=1;
	 break; }
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){
	     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){
	    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){
	    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){
	    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.close();
return 0;
}