Pagini recente » Cod sursa (job #1467487) | Cod sursa (job #50869) | Cod sursa (job #374359) | Cod sursa (job #987206) | Cod sursa (job #889529)
Cod sursa(job #889529)
#include <fstream>
#include <iostream>
using namespace std;
int n,m,matr[100][100],matj[100][100],xR,xJ,yR,yJ,x[100*100],pas,y[100*100],first ,last,z[100*100],zz[100*100],q=0;
const short int dx[]={0,1,0,-1,1,1,-1,-1};
const short int dy[]={-1,0,1,0,1,-1,-1,1};
ifstream g("rj.in");
ofstream f("rj.out");
void citire()
{ int i,j;
char v[101];
g>>n>>m;
g.getline(v, m+1);
for(i=0;i<n;i++)
{
g.getline(v,m+1);
for(j=0;j<=m;j++)
{
if(v[j-1]=='X'){matr[i][j-1]=-1;matj[i][j-1]=-1;}
else if(v[j-1]==' '){matr[i][j-1]=0;matj[i][j-1]=0;}
else if(v[j-1]=='R')
{
matr[i][j-1]=1;
xR=i;
yR=j-1;
}
else if(v[j-1]=='J')
{
matj[i][j-1]=1;
xJ=i;
yJ=j-1;
}
}
}
}
int bun( int ii,int jj)
{
return(ii>=0)&&(ii<n)&&(jj<m)&&(jj>=0);
}
void leer()
{ short int ii,jj,k;
while(first<=last)
{
for(k=0;k<8;k++)
{
ii=x[first]+dx[k];
jj=y[first]+dy[k];
if(bun(ii,jj))
if(matr[ii][jj]==0)
{ pas=matr[x[first]][y[first]];
pas++;
matr[ii][jj]=pas;
last++;
x[last]=ii;
y[last]=jj;
}
}
first++;
}
}
void leej()
{ short int ii,jj,k;
while(first<=last)
{
for(k=0;k<8;k++)
{
ii=x[first]+dx[k];
jj=y[first]+dy[k];
if(bun(ii,jj))
if(matj[ii][jj]==0)
{ pas=matj[x[first]][y[first]];
pas++;
matj[ii][jj]=pas;
if(pas==matr[ii][jj]){ z[q]=ii; zz[q]=jj; q++;}
last++;
x[last]=ii;
y[last]=jj;
}
}
first++;
}
}
int main()
{
int i,mnx,mny,p;
citire();
x[0]=xR;
y[0]=yR;
leer();
for(i=0;i<100;i++)
x[i]=0;
for(i=0;i<100;i++)
y[i]=0;
first=0;last=0;
x[0]=xJ;
y[0]=yJ;
leej();
if(q==1)f<<matr[z[q-1]][zz[q-1]]<<" "<<z[q-1]+1<<" "<<zz[q-1]+1<<endl;
else {
mnx=z[0];mny=z[0];
for(i=1;i<q;i++)
if(mnx>z[i]){ mnx=z[i];mny=zz[i]; p=i; }
for(i=0;i<q;i++)
if(mnx==z[i]){ if(mny>zz[i]) mny=zz[i]; }
f<<matr[mnx][mny]<<" "<<mnx+1<<" "<<mny+1<<" ";
}
f.close();
return 0;
}