Pagini recente » Cod sursa (job #1339707) | Cod sursa (job #1540910) | Cod sursa (job #938453) | Cod sursa (job #1102865) | Cod sursa (job #2316965)
#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int mat1[105][105],n,m,tmin,mat2[105][105],mini=9999999;
struct poz{int lin,col;}pozcrt,a,b;
const int dl[8]={-1,-1,0,1,1,1,0,-1};
const int dc[8]={0,1,1,1,0,-1,-1,-1};
poz coada[105*105];
int inc,sf;
void citire()
{int i,j,lg;
char s[105];
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{f.getline(s,105);
lg=strlen(s);
for(j=0;j<lg;j++)
{
if(s[j]==' ')
mat1[i][j+1]=0;
else if(s[j]=='X')
mat1[i][j+1]=-1;
else if(s[j]=='J')
{mat1[i][j+1]=1;
a.lin=i;
a.col=j+1;}
else {mat1[i][j+1]=1;
b.lin=i;
b.col=j+1;}
}
}
}
void bordare()
{int i,j;
for(i=0;i<=n+1;i++)
{mat1[i][0]=-1;
mat1[i][m+1]=-1;
}
for(j=0;j<=m+1;j++)
{mat1[0][j]=-1;
mat1[n+1][j]=-1;
}
for(i=0;i<=n+1;i++)
for(j=0;j<=m+1;j++)
mat2[i][j]=mat1[i][j];
}
void afisare(int mat[105][105])
{int i,j;
for(i=0;i<=n+1;i++)
{for(j=0;j<=m+1;j++)
g<<setw(2)<<mat[i][j]<<" ";
g<<endl;}
g<<endl;
}
void lee(poz x, poz y,int mat[105][105])
{int i;
poz vecin;
inc=0;
sf=-1;
coada[++sf]=x;
pozcrt=x;
mat[y.lin][y.col]=0;
while(inc<=sf && ((pozcrt.lin!=y.lin || pozcrt.col!=y.col)) )
{pozcrt=coada[inc++];
for(i=0;i<8;i++)
{vecin.lin=pozcrt.lin+dl[i];
vecin.col=pozcrt.col+dc[i];
if(mat[vecin.lin][vecin.col]==0)
{mat[vecin.lin][vecin.col]=mat[pozcrt.lin][pozcrt.col]+1;
coada[++sf]=vecin;}
}
}
}
int main()
{int i,j,linie,coloana;
citire();
bordare();
lee(a,b,mat1);
lee(b,a,mat2);
for(i=n;i>0;i--)
for(j=m;j>0;j--)
if(mat1[i][j]==mat2[i][j] && mat1[i][j]>0 && mat1[i][j]<=mini)
{mini=mat1[i][j];
linie=i;
coloana=j;
}
g<<mini<<" "<<linie<<" "<<coloana;
return 0;
}