Pagini recente » Cod sursa (job #1293015) | Cod sursa (job #989128) | Cod sursa (job #2407184) | Cod sursa (job #2415753) | Cod sursa (job #2433222)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
int n, m, x[102][102], i, j, clin[10001], ccol[10001], k, p, auxr[102][102], minim, lj, cj, val, i2, j2, auxj[102][102];
int l[9] = {-1, -1, -1, 0, 1, 1, 1, 0}, c[9] = {-1, 0, 1, 1, 1, 0, -1, -1};
char a;
int jmin,imin;
int main()
{
fin >> n >> m;
// a = fin.get(); // citeste mai intai '\r'
a = fin.get(); // citeste mai intai '\n'
for (i = 1; i<= n; i++)
{
for (j = 1; j<= m; j++)
{
a = fin.get();
// fout<<a;
switch (a) {
case 'X':
auxr[i][j] = auxj[i][j] = x[i][j] = -1;
break;
case 'R':
x[i][j] = auxj[i][j] = 0;
auxr[i][j] = 1;
k = 1;
clin[1] = i;
ccol[1] = j;
break;
case 'J':
x[i][j] = auxr[i][j]= 0;
auxj[i][j] = 1;
lj = i;
cj = j;
break;
case ' ': // spatiu
auxr[i][j] = auxj[i][j] = x[i][j] = 0;
break;
default: // \n
for (p = j; p<=m; p++)
auxr[i][p] = auxj[i][p] = x[i][p] = 0;
j = m+2;
break;
}
}
if (j<m+2)
a = fin.get();
// fout<<a;
// a = fin.get();
}
/* for (i = 1; i<= n; i++)
{
for (j = 1; j<= m; j++)
cout << x[i][j] << " ";
cout << "\n";
}
*/
//pt romeo
while (k > 0)
{
val = auxr[clin[1]][ccol[1]];
for (p = 0; p< 8; p++)
{
i2 = clin[1] + l[p];
j2 = ccol[1] + c[p];
if(i2<=n and i2>=1 and j2<=m and j2>=1 and x[i2][j2] == 0 && auxr[i2][j2] == 0)
{
k++;
clin[k] = i2;
ccol[k] = j2;
auxr[i2][j2] = val+1;
}
}
for (i = 1; i<= k-1; i++)
{
clin[i] = clin[i+1];
ccol[i] = ccol[i+1];
}
k--;
}
/* for (i = 1; i<= n; i++)
{
for (j = 1; j<= m; j++)
cout << auxr[i][j] << " ";
cout << "\n";
}
*/
//pt julieta
k = 1;
clin[1] = lj;
ccol[1] = cj;
while (k > 0)
{
val = auxj[clin[1]][ccol[1]];
for (p = 0; p< 8; p++)
{
i2 = clin[1] + l[p];
j2 = ccol[1] + c[p];
if(i2<=n and i2>=1 and j2<=m and j2>=1 and x[i2][j2] == 0 && auxj[i2][j2] == 0)
{
k++;
clin[k] = i2;
ccol[k] = j2;
auxj[i2][j2] = val+1;
}
}
for (i = 1; i<= k-1; i++)
{
clin[i] = clin[i+1];
ccol[i] = ccol[i+1];
}
k--;
}
/* for (i = 1; i<= n; i++)
{
for (j = 1; j<= m; j++)
cout << auxj[i][j] << " ";
cout << "\n";
}
*/
//gasire punct de intalnire
minim = 10002;
jmin=1000;
val = 0;
for (i = 1; i<= n; i++)
for (j = 1; j<= m; j++)
if(auxr[i][j] == auxj[i][j] && auxr[i][j] > 0 && auxr[i][j] < minim)
{
val=1;
minim = auxr[i][j];
clin[val] = i;
ccol[val] = j;
jmin=j;
imin=i;
}
else if(auxr[i][j] == auxj[i][j] && auxr[i][j] > 0 && auxr[i][j] == minim and i<imin)
{
val=1;
minim = auxr[i][j];
clin[val] = i;
ccol[val] = j;
jmin=j;
imin=i;
}
else if(auxr[i][j] == auxj[i][j] && auxr[i][j] > 0 && auxr[i][j] == minim and i==imin and j<jmin)
{
val=1;
minim = auxr[i][j];
clin[val] = i;
ccol[val] = j;
jmin=j;imin=i;
}
// if(val == 1)
fout << minim << " " << clin[1] << " " << ccol[1];
/* else
if(val > 1)
{
k = 102;
i2 = 0;
for (i = 1; i<= val; i++)
if(k > ccol[i])
{
k = ccol[i];
i2 = i;
}
fout << minim << " " << clin[i2] << " " << ccol[i2];
}
*/
return 0;
}