Cod sursă (job #595778)

Utilizator avatar Remus Rughinis Remus Remus IP ascuns
Problemă Immortal (clasele 9-10) Compilator c-32 | 1,93 kb
Rundă Arhiva de probleme Status evaluat
Dată 10 apr. 2021 11:32:50 Scor 10
#include <stdio.h>
#include <stdlib.h>

int v[20][20],r[400][4];

int n,m,k;
FILE *fin, *fout;
int bkt(int id){
  int i,j;
  if(id == k-1){
    for(i=0;i<id;i++){
      fprintf(fout,"%d %d %d %d\n",r[i][0]+1,r[i][1]+1,r[i][2]+1,r[i][3]+1);
    }
    return 1;
  }

  for(i=0;i<n;i++){
    for(j=0;j<m;j++){
      if(v[i][j] == 1){
          r[id][0] = i;
          r[id][1] = j;
         if(i>1 && v[i-1][j]==1 && v[i-2][j] == 0){
            r[id][2] = i-2;
            r[id][3] = j;

            v[i-2][j] = 1;
            v[i][j] = v[i-1][j] = 0;
            if(bkt(id + 1) == 1)
              return 1;
            v[i-2][j] = 1;
            v[i][j] = v[i-1][j] = 0;
         }

         if(i<n-2 && v[i+1][j] == 1 && v[i+2][j] == 0){
            r[id][2] = i+2;
            r[id][3] = j;

            v[i+2][j]=1;
            v[i+1][j] = v[i][j] = 0;
            if(bkt(id + 1) == 1)
              return 1;
            v[i+2][j]=0;
            v[i+1][j] = v[i][j] = 1;
         }

         if(j>1 && v[i][j-1]==1 && v[i][j-2] == 0){
            r[id][2] = i;
            r[id][3] = j-2;

            v[i][j-2] = 1;
            v[i][j] = v[i][j-1] = 0;
            if(bkt(id + 1) == 1)
              return 1;
            v[i][j-2] = 0;
            v[i][j] = v[i][j-1] = 1;
         }

         if(j<m-2 && v[i][j+1]==1 && v[i][j+2] == 0){
            r[id][2] = i;
            r[id][3] = j+2;

            v[i][j+2] = 1;
            v[i][j] = v[i][j+1] = 0;
            if(bkt(id + 1) == 1)
              return 1;
            v[i][j+2] = 0;
            v[i][j] = v[i][j+1] = 1;
         }
      }
    }
  }

  return 0;
}

int main(){
  int l,c,i;

  fin=fopen("immortal.in","r");
  fscanf(fin,"%d%d%d",&n,&m,&k);
  for(i=0;i<k;i++){
    fscanf(fin,"%d%d",&l,&c);
    v[l-1][c-1]=1;
  }
  fclose(fin);
  fout=fopen("immortal.out","w");
  bkt(0);
  fclose(fout);
  return 0;
}