Cod sursa(job #1375082)

Utilizator iamandeimihaiIamandei Mihai iamandeimihai Data 5 martie 2015 12:02:25
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.34 kb
#include<iostream>
#include<string.h>
#include<queue>
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
	queue<int> qx;
	queue<int> qy;
int main()
{
	int x,x1,y,y1,xx,yy,i,j,m,n,mat[100][100];
	char v[100];
	f>>m>>n;
    f.get();
    for(i=1; i<=n; i++)
    {
       f.getline(v,m+1);
       for(j=0;j<strlen(v); j++)
        {
            if( v[j]== 'X') mat[i][j+1]=-1;
            if( v[j] == 'R') {x=i;y=j;}
            if(v[j] == 'J') {x1=i;y1=j;}
        }}
        for(i=0;i<=n+1;i++){
            mat[i][0]=-1;
            mat[i][n+1]=-1;
          }
        for(i=0;i<=n+1;i++){
            mat[0][i]=-1;
            mat[n+1][i]=-1;
          }

    qx.push(x);
    qy.push (y);
    while(xx!=x1 || yy!=y1)
    {
        xx=qx.front();
        yy=qy.front();
        if(mat[xx-1][yy]==0|| mat[xx-1][yy]>mat[xx][yy]+1){
            mat[xx-1][yy]=mat[xx][yy]+1;
            qx.push(xx-1);
            qy.push(yy);
    }
        if(mat[xx+1][yy]==0||mat[xx+1][yy]>mat[xx][yy]+1){
            mat[xx+1][yy]=mat[xx][yy]+1;
            qx.push(xx+1);
            qy.push(yy);
    }
        if(mat[xx][yy-1]==0||mat[xx][yy-1]>mat[xx][yy]+1){
            mat[xx][yy-1]=mat[xx][yy]+1;
            qx.push(xx);
            qy.push(yy-1);
    }
         if(mat[xx][yy+1]==0||mat[xx][yy+1]>mat[xx][yy]+1){
            mat[xx][yy+1]=mat[xx][yy]+1;
            qx.push(xx);
            qy.push(yy+1);
         }

        if(mat[xx+1][yy+1]==0||mat[xx+1][yy+1]>mat[xx][yy]+1){
            mat[xx+1][yy+1]=mat[xx][yy]+1;
            qx.push(xx+1);
            qy.push(yy+1);
            }
        if(mat[xx-1][yy+1]==0||mat[xx-1][yy+1]>mat[xx][yy]+1){
            mat[xx-1][yy+1]=mat[xx][yy]+1;
            qx.push(xx-1);
            qy.push(yy+1);
        }
        if(mat[xx+1][yy-1]==0||mat[xx+1][yy-1]>mat[xx][yy]+1){
            mat[xx+1][yy-1]=mat[xx][yy]+1;
            qx.push(xx+1);
            qy.push(yy-1);
        }
        if(mat[xx-1][yy-1]==0||mat[xx-1][yy-1]>mat[xx][yy]+1){
            mat[xx-1][yy+1]=mat[xx][yy]+1;
            qx.push(xx-1);
            qy.push(yy-1);
        }
    qx.pop();
    qy.pop();
    }
    for(i=1;i<=n;i++)    for(j=1;j<=n;j++) if(mat[i][j]==mat[x1][y1]/2)g<<i<<" "<<j<<"  ";
    g<<mat[x1][y1]/2;
	f.close();
	g.close();
	return 0;
}