Cod sursa(job #1769768)
Utilizator | Data | 3 octombrie 2016 09:45:18 | |
---|---|---|---|
Problema | Rj | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 4.77 kb |
#include <iostream>
#include <cstdio>
#include <climits>
using namespace std;
int i,j,n,m, a[100][100],p,u,b[100][100],nr,x,y,d[100][2],k,lin1, lin2,col1,col2,mi;
char c,s[105];
int main()
{
/*f>>n>>m;
f.get(c);
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
f.get(c);
if(c=='R') a[i][j]=-2,lin1=i,col1=j;
else if(c=='J') b[i][j]=-3,lin2=i,col2=j;
else if(c=='X') a[i][j]=b[i][j]= -1;
}*/
freopen("date.in","r",stdin);//redefinesc tast ca fiin date.in
freopen("date.out","w",stdout);
scanf("%d%d\n",&n,&m);
mi=INT_MAX;
for (i=1;i<=n;i++)
{
gets(s+1);
for (j=1;j<=m;j++)
if (s[j]=='R') a[i][j]=-2,lin1=i,col1=j;
else
if (s[j]=='J') b[i][j]=-3,lin2=i,col2=j;
else
if (s[j]=='X') a[i][j]=b[i][j]=-1;
}
{
p=1;
u=1;
d[p][0]=lin1;
d[p][1]=col1;
a[lin1][col1]=0;
while(p<=u)
{
x=d[p][0];
y=d[p][1]; k=a[x][y];
if(x>1 && a[x-1][y]==0)
{ u++;
d[u][0]=x-1;
d[u][1]=y;
a[x-1][y]=k+1;
}
if(y<m && a[x][y+1]==0)
{u++;
d[u][0]=x;
d[u][1]=y+1;
a[x][y+1]=k+1;;
}
if(x<n && a[x+1][y]==0)
{u++;
d[u][0]=x+1;
d[u][1]=y;
a[x+1][y]=k+1;
}
if(y>1 && a[x][y-1]==0)
{u++;
d[u][0]=x;
d[u][1]=y-1;
a[x][y-1]=k+1;
}
if(y>1 && x>1 && a[x-1][y-1]==0)
{
u++;
d[u][0]=x-1;
d[u][1]=y-1;
a[x-1][y-1]=k+1;
}
if(y<m && x>1 && a[x-1][y+1]==0)
{
u++;
d[u][0]=x-1;
d[u][1]=y+1;
a[x-1][y+1]=k+1;
}
if(y<m && x<n && a[x+1][y+1]==0)
{
u++;
d[u][0]=x+1;
d[u][1]=y+1;
a[x+1][y+1]=k+1;
}
if(y>1 && x<n && a[x+1][y-1]==0)
{
u++;
d[u][0]=x+1;
d[u][1]=y-1;
a[x+1][y-1]=k+1;
}
p++;
}
}
{
p=1;
u=1;
d[p][0]=lin2;
d[p][1]=col2;
b[lin2][col2]=0;
while(p<=u)
{
x=d[p][0];
y=d[p][1]; k=b[x][y];
if(x>1 && b[x-1][y]==0)
{ u++;
d[u][0]=x-1;
d[u][1]=y;
b[x-1][y]=k+1;
}
if(y<m && a[x][y+1]==0)
{u++;
d[u][0]=x;
d[u][1]=y+1;
b[x][y+1]=k+1;;
}
if(x<n && b[x+1][y]==0)
{u++;
d[u][0]=x+1;
d[u][1]=y;
b[x+1][y]=k+1;
}
if(y>1 && b[x][y-1]==0)
{u++;
d[u][0]=x;
d[u][1]=y-1;
b[x][y-1]=k+1;
}
if(y>1 && x>1 && b[x-1][y-1]==0)
{
u++;
d[u][0]=x-1;
d[u][1]=y-1;
b[x-1][y-1]=k+1;
}
if(y<m && x>1 && b[x-1][y+1]==0)
{
u++;
d[u][0]=x-1;
d[u][1]=y+1;
b[x-1][y+1]=k+1;
}
if(y<m && x<n && b[x+1][y+1]==0)
{
u++;
d[u][0]=x+1;
d[u][1]=y+1;
b[x+1][y+1]=k+1;
}
if(y>1 && x<n && b[x+1][y-1]==0)
{
u++;
d[u][0]=x+1;
d[u][1]=y-1;
b[x+1][y-1]=k+1;
}
p++;
}
}
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
if(a[i][j]==b[i][j] && a[i][j]<mi && a[i][j]>=1) mi=a[i][j];
}
printf("%3d",mi);
}