Cod sursa(job #505115)

Utilizator r0cesStefan Radu r0ces Data 30 noiembrie 2010 19:56:11
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.39 kb
#include<fstream.h>
#include<math.h>
#include<iostream.h>
#include<stdio.h>
typedef struct{
    int x,y;}COADA;
COADA c[1100];
int a[150][150],b[150][150];
int p,u,xv,yv,xn,x1,x2,y2,n,m,i,j,z,t,timp,ok,min,li,co;
    int nn,yy;
    int dx[9],dy[9];
    char car,*num1,*num2;
int main()
{
    dx[1]=-1;dx[2]=0;dx[3]=1;dx[4]=0;dx[5]=-1;dx[6]=1;dx[7]=1;dx[8]=-1;
    dy[1]=0;dy[2]=1;dy[3]=0;dy[4]=-1;dy[5]=1;dy[6]=1;dy[7]=-1;dy[8]=-1;
    FILE *f=fopen("rj.in","r");
    ofstream fcout("rj.out");
	fscanf(f,"%d",&n);
	fscanf(f,"%d",&m);
    for(i=1;i<=n;i++)
    {
		for(j=1;j<=m;j++)
        {
			fscanf(f,"%c",&car); 
            if(car=='R')
                {
                    a[i][j]=1;
					b[i][j]=0;
                    x1=i;
                    yy=j;
                }
            else if(car=='J')
                {
                    b[i][j]=1;
					a[i][j]=0;
                    x2=i;
                    y2=j;
                }
            else if(car=='X'){
                a[i][j]=-1;
                b[i][j]=-1;
            }
            else if(car==' '){
                a[i][j]=0;
                b[i][j]=0;
            }
			else j--;
        }
    }
     
    
    p=u=1;
    c[u].x=x1;c[u].y=yy;
    while(p<=u)
    {
        xv=c[p].x;
        yv=c[p].y;
        for(i=1;i<=8;i++)
        {
            xn=xv+dx[i];
            nn=yv+dy[i];
            if(xv>=1&&xv<=n&&yv>=1&&yv<=m&&a[xn][nn]==0)
            {
                a[xn][nn]=a[xv][yv]+1;
                c[++u].x=xn;c[u].y=nn;
            }
        }
        p++;
    }
     

     
    p=u=1;
    c[u].x=x2;c[u].y=y2;
    while(p<=u)
    {
        xv=c[p].x;
        yv=c[p].y;
        for(i=1;i<=8;i++)
        {
            xn=xv+dx[i];
            nn=yv+dy[i];
				if(xv>=1&&xv<=n&&yv>=1&&yv<=m&&b[xn][nn]==0)
            {
                b[xn][nn]=b[xv][yv]+1;
                c[++u].x=xn;c[u].y=nn;
            }
        }
        p++;
    }
     
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)
            cout<<b[i][j]<<" ";
        cout<<"\n";}
     
    li=200;co=200;min=100000;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j]&&a[i][j]<min&&a[i][j]>0){
                min=a[i][j];
                z=i;
                t=j;
            }
             
     
    fcout<<min<<" "<<z<<" "<<t;
    return 0;
}