Pagini recente » Rating Andreea Bajenaru (AndreeaBajenaru) | Istoria paginii runda/285600/clasament | Cod sursa (job #1739162) | Cod sursa (job #1627654) | Cod sursa (job #890908)
Cod sursa(job #890908)
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const int dx[]={1,0,-1,0,1,-1,-1,1};
const int dy[]={0,1,0,-1,1,-1,1,-1};
int mat1[100][100],mat2[100][100];
int coada1[2][10000];
int coada2[2][10000];
int m,n;
ifstream in("RJ.in");
ofstream out("RJ.out");
bool bune(int x,int y)
{
if(x>0 && y>0 && x<n && y<m)
if(mat1[x][y]==0)
return true;
else return false;
}
void RJ(int x1,int y1,int x2,int y2)
{
int i,top1,top2,k,j,tmin;
top1=1;top2=1;
coada1[0][0]=x1;coada1[1][0]=y1;
coada2[0][0]=x2;coada2[1][0]=y2;
for(i=0;i<top1;i++)
{
x1=coada1[0][i];
y1=coada1[1][i];
for(k=0;k<8;k++)
{
if(x1+dx[k]>=0 && y1+dy[k]>=0 && x1+dx[k]<n && y1+dy[k]<m && mat1[x1+dx[k]][y1+dy[k]]==0)
{coada1[0][top1]=x1+dx[k];
coada1[1][top1]=y1+dy[k];
mat1[x1+dx[k]][y1+dy[k]]=mat1[x1][y1]+1;
top1++;}
}
}
for(j=0;j<top2;j++)
{
x2=coada2[0][j];
y2=coada2[1][j];
for(k=0;k<8;k++)
{
if(x2+dx[k]>=0 && y2+dy[k]>=0 && x2+dx[k]<n && y2+dy[k]<m && mat2[x2+dx[k]][y2+dy[k]]==0)
{coada2[0][top2]=x2+dx[k];
coada2[1][top2]=y2+dy[k];
mat2[x2+dx[k]][y2+dy[k]]=mat2[x2][y2]+1;
top2++;}
}
}
tmin=100;
for(i=0;i<n;i++)
for(k=0;k<m;k++)
if(mat1[i][k]==mat2[i][k] && mat1[i][k]>0 && mat1[i][k]<tmin)
{tmin=mat1[i][k];
x1=i+1;y1=k+1;}
out<<tmin<<" "<<x1<<" "<<y1;
}
int main()
{
int x1,y1,x2,y2,i,k;
string x;
in>>n>>m;
getline(in,x);
for(i=0;i<n;i++)
{
getline(in,x);
for(k=0;k<m;k++)
{
if(x[k]=='X') {mat1[i][k]=-1; mat2[i][k]=-1;}
else
if(x[k]=='R') {mat1[i][k]=1; x1=i; y1=k;}
else
if(x[k]=='J') {mat2[i][k]=1; x2=i; y2=k;}
}
}
RJ(x1,y1,x2,y2);
out.close();
in.close();
}