Cod sursa(job #183333)

Utilizator zbarniZajzon Barna zbarni Data 21 aprilie 2008 22:43:04
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream.h>
#include<stdlib.h>
#define g 155
using namespace std;
int a[g][g];
int main()
 {
  ifstream be ("castel.in");
  ofstream ki ("castel.out");
  int c[24000],lista[24000];
  int m,n,i,j,k,sz,ok,e,v;
  be>>m>>n>>k;

  for (i=1;i<=m;i++)
     for (j=1;j<=n;j++)
       { be>>a[i][j]; }
  be.close();
  for (i=1;i<=24000;i++)
     c[i]=0;
  ok=1;sz=1;
  c[k]=1;lista[1]=k;v=1;
  while (ok)
   {
    ok=0;
    e=1;
    while (e<=v)
      {
       k=lista[e];
       //kinek nezem a szomszedjat
       if (k%n)
	 { i=k/n+1; j=k-((i-1)*n); }
       else
	 { i=k/n;   j=n; }
       //a negy szomszedja
       if (c[a[i-1][j]]==1&&c[k-n]==0&&i>1)
	 { c[k-n]=1; ok=1; sz++; lista[++v]=k-n; }

       if (c[a[i][j+1]]==1&&c[k+1]==0&&j<n)
	 { c[k+1]=1;ok=1;sz++;lista[++v]=k+1; }

       if (c[a[i+1][j]]==1&&c[k+n]==0&&i<m)
	 { c[k+n]=1; ok=1; sz++; lista[++v]=k+n; }

       if (c[a[i][j-1]]==1&&c[k-1]==0&&j>1)
	 { c[k-1]=1; ok=1; sz++; lista[++v]=k-1; }
       e++;
      }
   }
  ki<<sz<<'\n';
  ki.close();
  return 0;
 }