Pagini recente » Cod sursa (job #1830773) | Cod sursa (job #657221) | Cod sursa (job #524289) | Cod sursa (job #1363217) | Cod sursa (job #133415)
Cod sursa(job #133415)
#include<fstream>
#include<string.h>
#define Max 100
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
char c[Max][Max];
int ir,jr,m,n,b[Max][Max],jj,ij;
const int di[] = {-1,-1,0,1,1,1,0,-1},
dj[] = {0,1,1,1,0,-1,-1,-1};
void read()
{
int i;
fin>>m>>n;
for(i = 0; i <= n; i++)
{
fin.getline(c[i],Max);
strcpy(c[i]+1,c[i]);
}
}
int search()
{
int i,j,cont =1;
for(i = 1; i <= n && cont == 1;i++)
{
for(j = 1; j <= m; j++)
if(c[i][j] == 'J')
{
ij = i;
jj = j;
cont = 0;
}
}
for(i = 1; i <= n ;i++)
{
for(j = 1; j <= m; j++)
if(c[i][j] == 'R')
{
ir = i;
jr = j;
return 0;
}
}
return 0;
}
int ok(int i,int j)
{
if(i < 1 or i > n || j < 1 or j > m)return 0;
if(c[i][j] == 'X')return 0;
if(b[i][j] != 0) return 0;
return 1;
}
void vec(int iv,int jv,int d)
{
int i,l = Max,k = Max;
for(i = 0; i < 8 ; i++)
{
if(b[iv+di[i]][jv+dj[i]] == d+1)
{
if(l > iv + di[i])
{
l = iv+di[i];
k = jv+dj[i];
}
if( l == iv + di[i])
if( k > jv + dj[i])
k = jv + dj[i];
}
}
fout<<l<<" "<<k<<" ";
}
void road()
{
int i,j,k=1,d;
b[ir][jr] = 1;
while(b[ij][jj] == 0)
{
for(i = 1; i <= n; i++)
{
for(j = 1; j <= m; j++)
if(b[i][j] == k)
for(d = 0; d < 8; d++)
if(ok(i+di[d],j+dj[d]) == 1)
b[i+di[d]][j+dj[d]] = k+1;
}
k = k+1;
}
d = b[ij][jj]/2;
j = 1;
/* for(i = 1; i <= n; i++)
{
for(j = 1; j <= m; j++)
fout<<b[i][j]<<" ";
fout<<"\n";
}
/* while(j == 1)
{
for(i = 0; i < 8; i++)
if(b[ij-di[i]][jj-dj[i]] == k-1)
{
k = k-1;
ij = ij-di[i];
jj = jj-dj[i];
if(d+2 == k)
{
j = 0;
break;
}
}
}*/
vec(ij,jj,d);
//fout<<ij<<" "<<jj<<" ";
fout<<d+1;
//fout<<"\n";
//*/
}
int main(void)
{
read();
search();
road();
}