Cod sursa(job #1380293)
Utilizator | Data | 7 martie 2015 12:17:19 | |
---|---|---|---|
Problema | Rj | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 5.48 kb |
#include <iostream>
#include <fstream>
using namespace std;
int a[150][150],b[150][150],c[150][150],d[150][150];
int n,m,xr,yr,xj,yj,i,j;
ifstream f("rj.in");
ofstream g("rj.out");
void citire()
{
char x;
f>>n>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m+1; j++)
{
f>>x;
if(x=='\n' && j!=m+1)
{
x=' ';
j++;
}
if(x==' ')
{
a[i][j]=0;
b[i][j]=0;
}
if(x=='X')
{
a[i][j]=-1;
b[i][j]=-1;
}
if(x=='R')
{
xr=i;
yr=j;
}
if(x=='J')
{
xj=i;
yj=j;
}
}
}
void rez()
{
int k=0,sol=1;
c[xr][yr]=1;
while(sol==1)
{
sol=0;
k++;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(c[i][j]==k)
{
if (a[i-1][j]==0 && c[i-1][j]==0 && i-1<=n && i-1>=1)
{
sol=1;
c[i-1][j]=k++;
a[i][j]=-1;
}
if (a[i][j-1]==0 && c[i][j-1]==0 && j-1<=m && j-1>=1)
{
sol=1;
c[i][j-1]=k++;
a[i][j]=-1;
}
if (a[i+1][j]==0 && c[i+1][j]==0 && i+1<=n && i+1>=1)
{
sol=1;
c[i+1][j]=k++;
a[i][j]=-1;
}
if (a[i][j+1]==0 && c[i][j+1]==0 && j+1<=m && j+1>=1)
{
sol=1;
c[i][j+1]=k++;
a[i][j]=-1;
}
if (a[i-1][j-1]==0 && c[i-1][j-1]==0 && i-1<=n && i-1>=1 && j-1<=m && j-1>=1)
{
sol=1;
c[i-1][j-1]=k++;
a[i][j]=-1;
}
if (a[i-1][j+1]==0 && c[i+1][j+1]==0 && i-1<=n && i-1>=1 && j+1<=m && j+1>=1)
{
sol=1;
c[i-1][j+1]=k++;
a[i][j]=-1;
}
if (a[i+1][j-1]==0 && c[i+1][j-1]==0 && i+1<=n && i+1>=1 && j-1<=m && j-1>=1)
{
sol=1;
c[i+1][j-1]=k++;
a[i][j]=-1;
}
if (a[i+1][j+1]==0 && c[i+1][j+1]==0 && i+1<=n && i+1>=1 && j+1<=m && j+1>=1)
{
sol=1;
c[i+1][j+1]=k++;
a[i][j]=-1;
}
}
}
sol=1;
k=0;
d[xj][yj]=1;
while(sol==1)
{
sol=0;
k++;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (d[i][j]==k)
{
if (b[i-1][j]==0 && d[i-1][j]==0 && i-1<=n && i-1>=1)
{
sol=1;
d[i-1][j]=k++;
b[i][j]=-1;
}
if (b[i][j-1]==0 && d[i][j-1]==0 && j-1<=m && j-1>=1)
{
sol=1;
d[i][j-1]=k++;
b[i][j]=-1;
}
if (b[i+1][j]==0 && d[i+1][j]==0 && i+1<=n && i+1>=1)
{
sol=1;
d[i+1][j]=k++;
b[i][j]=-1;
}
if (b[i][j+1]==0 && d[i][j+1]==0 && j+1<=m && j+1>=1)
{
sol=1;
d[i][j+1]=k++;
b[i][j]=-1;
}
if (b[i-1][j-1]==0 && d[i-1][j-1]==0 && i-1<=n && i-1>=1 && j-1<=m && j-1>=1)
{
sol=1;
d[i-1][j-1]=k++;
b[i][j]=-1;
}
if (b[i-1][j+1]==0 && d[i-1][j+1]==0 && i-1<=n && i-1>=1 && j+1<=m && j+1>=1)
{
sol=1;
d[i-1][j+1]=k++;
b[i][j]=-1;
}
if (b[i+1][j-1]==0 && d[i+1][j-1]==0 && i+1<=n && i+1>=1 && j-1<=m && j-1>=1)
{
sol=1;
d[i+1][j-1]=k++;
b[i][j]=-1;
}
if (b[i+1][j+1]==0 && d[i+1][j+1]==0 && i+1<=n && i+1>=1 && j+1<=m && j+1>=1)
{
sol=1;
d[i+1][j+1]=k++;
b[i][j]=-1;
}
}
}
int min1=0,min2=0,min=9999999999;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(c[i][j]==d[i][j] && c[i][j] && d[i][j]<min)
{
min1=i;
min2=j;
min=c[i][j];
}
g<<min<<' '<<min1<<' '<<min2;
}
int main()
{
citire();
rez();
return 0;
}