Cod sursa(job #415829)

Utilizator S7012MYPetru Trimbitas S7012MY Data 11 martie 2010 21:28:16
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.54 kb
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
 
int a[100][100],b[100][100],n,m;
struct coada {
    int x;
    int y;
}co[100000],jr[2];


int main()
{
	int i,j,inc,sfc,ii,jj,k,tmin=102*102+5;
	int di[9]={0,-1, -1, 0, 1, 1, 1, 0, -1};
	int dj[9]={0,0, 1, 1, 1, 0, -1, -1,-1};
    char cc;
    FILE *f=fopen("rj.in", "r");
    FILE *g=fopen("rj.out", "w");
    fscanf(f,"%d %d",&n,&m);
    for(i=1; i<=n; i++) {
        fscanf(f,"%c",&cc);
        for(j=1; j<=m;j++) {
            fscanf(f,"%c",&cc);
            if(cc=='R') {
                a[i][j]=0;
                b[i][j]=0;
                jr[0].x=i;
                jr[0].y=j;
            }
            else if(cc=='J') {
                a[i][j]=0;
                b[i][j]=0;
                jr[1].x=i;
                jr[1].y=j;
            }
            else if(cc=='X') {
                a[i][j]=-2;
                b[i][j]=-2;
            }
            else if (cc==' ') {
                a[i][j]=-1;
                b[i][j]=-1;
            }
        }
    }
    //lee pentru prima matrice
    sfc=0; inc=0;
    co[inc].x=jr[0].x;
    co[inc].y=jr[0].y;
    while (inc<=sfc) {
		
		i=co[inc].x;
		j=co[inc].y;	
		inc++;
		
		for(k=1;k<=8;k++)
		{  	
		    ii=i+di[k];
		    jj=j+dj[k];
		   if(a[ii][jj]==-1)
		   {  a[ii][jj]=a[i][j]+1;
			   sfc++;
              co[sfc].x=ii;
              co[sfc].y=jj;
           }
		   
		  
		}
	}	   
		

    //lee pentru a doua
    sfc=0; inc=0;
    co[inc].x=jr[1].x;
    co[inc].y=jr[1].y;
    while (inc<=sfc) {
		
		i=co[inc].x;
		j=co[inc].y;	
		inc++;
		
		for(k=1;k<=8;k++)
		{  	
		    ii=i+di[k];
		    jj=j+dj[k];
			
		   if(b[ii][jj]==-1)
			   
		   {  b[ii][jj]=b[i][j]+1;
			   sfc++;
              co[sfc].x=ii;
              co[sfc].y=jj;
           }
		   
		  
		}
	}	   
		
    /*for(i=1; i<=n; i++) {
        for(j=1; j<=m; j++)
            fprintf(g,"%d ",a[i][j]);
        fprintf(g,"\n");
    }
    fprintf(g,"\n");*/
    /*for(i=1; i<=n; i++) {
        for(j=1; j<=m; j++)
            fprintf(g,"%d ",b[i][j]);
        fprintf(g,"\n");
    }
    fprintf(g,"\n");*/
  
    for(i=1; i<=n; i++) {
        for(j=1; j<=m; j++) {
            if(a[i][j]==b[i][j] && a[i][j]>0) {
                if(a[i][j]<tmin) {
                    tmin=a[i][j];
                    ii=i;
                    jj=j;
                }
            }
        }
    }
    fprintf(g,"%d %d %d", tmin+1, ii,jj);
    fclose(f);
    fclose(g);
    return 0;
}