Cod sursa(job #384201)

Utilizator vladcfVlad Frasineanu vladcf Data 19 ianuarie 2010 17:40:03
Problema Branza Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
//huge
#include<stdio.h>
FILE *f1,*f2;
int ll,nn,ok,d,b,h,i,j,k,n,ng,x,y,z,t,p;
char ma[36][36][36],l[2600],c[2600],a[2600];
int ant[2600];
int main(){
  f1=fopen("alge.in","r");
  f2=fopen("alge.out","w");
  fscanf(f1,"%d%d",&n,&ng);
  for(h=1;h<=ng;h++){
    fscanf(f1,"%d%d%d%d",&x,&y,&z,&t);
    for(i=x;i<=x+t-1;i++){
      for(j=y;j<=y+t-1;j++){
	for(k=z;k<=z+t-1;k++){
	  ma[i][j][k]=1;
	}
      }
    }
  }
  l[1]=1;
  c[1]=1;
  a[1]=1;
  ll=1;
  i=0;
  ok=0;
  do{
    i++;
    if(l[i]==n&&c[i]==n&&a[i]==n){
      ok=1;
    }
    else{
    //l
    if((l[i]-1>0)&&ma[l[i]-1][c[i]][a[i]]==0){
      ma[l[i]-1][c[i]][a[i]]=1;
      ll++;
      l[ll]=l[i]-1;
      c[ll]=c[i];
      a[ll]=a[i];
      ant[ll]=i;
    }
    if((l[i]+1<n+1)&&ma[l[i]+1][c[i]][a[i]]==0){
      ma[l[i]+1][c[i]][a[i]]=1;
      ll++;
      l[ll]=l[i]+1;
      c[ll]=c[i];
      a[ll]=a[i];
      ant[ll]=i;
    }
    //c
    if((c[i]-1>0)&&ma[l[i]][c[i]-1][a[i]]==0){
      ma[l[i]][c[i]-1][a[i]]=1;
      ll++;
      l[ll]=l[i];
      c[ll]=c[i]-1;
      a[ll]=a[i];
      ant[ll]=i;
    }
    if((c[i]+1<n+1)&&ma[l[i]][c[i]+1][a[i]]==0){
      ma[l[i]][c[i]+1][a[i]]=1;
      ll++;
      l[ll]=l[i];
      c[ll]=c[i]+1;
      a[ll]=a[i];
      ant[ll]=i;
    }
    //a
    if((a[i]-1>0)&&ma[l[i]][c[i]][a[i]-1]==0){
      ma[l[i]][c[i]][a[i]-1]=1;
      ll++;
      l[ll]=l[i];
      c[ll]=c[i];
      a[ll]=a[i]-1;
      ant[ll]=i;
    }
    if((a[i]+1<n+1)&&ma[l[i]][c[i]][a[i]+1]==0){
      ma[l[i]][c[i]][a[i]+1]=1;
      ll++;
      l[ll]=l[i];
      c[ll]=c[i];
      a[ll]=a[i]+1;
      ant[ll]=i;
    }
    }
  }while(!ok);
  p=i;
  while(p!=1){
    nn++;
    d=ant[p];
    ant[p]+=10000;
    p=d;
  }
  fprintf(f2,"%d\n",nn+1);
  fprintf(f2,"%d %d %d\n",l[1],c[1],a[1]);
  for(p=2;p<i;p++){
    if(ant[p]/10000){
      fprintf(f2,"%d %d %d\n",l[p],c[p],a[p]);
    }
  }
  fprintf(f2,"%d %d %d",l[i],c[i],a[i]);
  return 0;
}