Cod sursa(job #1038383)

Utilizator RaduStefanFMI - Radu Stefan RaduStefan Data 21 noiembrie 2013 14:26:37
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.25 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; 
            } 
        } 
    } 
    
    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; 
           } 
		} 
    }       
	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++) { 
            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; 
}