Pagini recente » Cod sursa (job #3147089) | Cod sursa (job #2345542) | Cod sursa (job #2152479) | Istoria paginii preoni-2007/runda-3/10 | Cod sursa (job #1692016)
#include <iostream>
#include <cstdio>
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
short j,M[101][101],x,y,n,m,i,mnx=101*101,mny=101*101,mn=101*101;
char linie[101];
bool B[101][101];
deque < pair <short,short> > coada;
int main()
{
f>>n>>m;
f.getline(linie,m+1);
for (i=1;i<=n;i++)
{
f.getline(linie,m+1);
for (j=1;j<=m;j++)
{
if (linie[j-1]=='R') {M[i][j]=1; coada.push_back(make_pair(i,j));}
else if (linie[j-1]=='J') {M[i][j]=+1; coada.push_back(make_pair(i,j));B[i][j]=true;}
else if (linie[j-1]=='X') M[i][j]=-1;
}
//cout<<linie<<'\n';
}
for (i=0;i<=m+1;i++) M[0][i]=M[n+1][i]=-1;
for (i=0;i<=n+1;i++) M[i][0]=M[i][m+1]=-1;
int k=0;
int auxx[8]={0,0,1,1,1,-1,-1,-1};
int auxy[8]={1,-1,0,+1,-1,0,+1,-1};
while (coada.size()!=0)
{
x=coada[0].first;
y=coada[0].second;
for (i=0;i<8;i++)
{
if (M[x+auxx[i]][y+auxy[i]]==0)
{
coada.push_back(make_pair(x+auxx[i],y+auxy[i]));
B[x+auxx[i]][y+auxy[i]]=B[x][y];
M[x+auxx[i]][y+auxy[i]]=M[x][y]+1;
}
else if ((M[x+auxx[i]][y+auxy[i]]!=-1)&&(B[x][y]!=B[x+auxx[i]][y+auxy[i]]))
{
coada.push_back(make_pair(x+auxx[i],y+auxy[i]));
B[x+auxx[i]][y+auxy[i]]=B[x][y];
M[x+auxx[i]][y+auxy[i]]=M[x][y]+1;
//g<<M[x+auxx[i]][y+auxy[i]]<<" "<<x+auxx[i]<<" "<<y+auxy[i];
// k=coada.size()+10;
// break;
if ((M[x+auxx[i]][y+auxy[i]]<=mn)&&((x+auxx[i]<mnx)||(x+auxx[i]==mnx&&mny>y+auxy[i])))
{
mnx=x+auxx[i];
mny=y+auxy[i];
mn=M[x+auxx[i]][y+auxy[i]];
}
}
}
coada.pop_front();
}
/* for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
cout<<M[i][j]<<" ";
cout<<'\n';
}*/
g<<mn<<" "<<mnx<<" "<<mny;
}