Pagini recente » Cod sursa (job #1731660) | Cod sursa (job #1587832) | Cod sursa (job #738870) | Cod sursa (job #2584420) | Cod sursa (job #902766)
Cod sursa(job #902766)
#include <iostream>
#include<fstream>
using namespace std;
int n,m,i,j,a[100][100],k=8,b[100][100],prim,ultim;
int ln[8]={1,1,0,-1,-1,-1,0,1};
int col[8]={0,1,1,1,0,-1,-1,-1};
fstream f("fis.in",ios::in);
fstream g("fis.out",ios::out);
struct coordonate
{
int x,y;
};
coordonate c[100],p,v,pozr,pozj;
void citire()
{
char s[100];
f>>n;
f>>m;
f.get();
for(i=1;i<=n;i++)
{
f.getline(s,100);
for(j=0;j<m;j++)
{
if(s[j]==' ')
a[i][j+1]=0;
else if(s[j]=='X')
a[i][j+1]=1;
else if(s[j]=='R')
pozr.x=i,pozr.y=j+1;
else
pozj.x=i,pozj.y=j+1;
}
}
}
void bordare()
{
n=n+1;
m=m+1;
for(i=0;i<=n;i++)
a[i][0]=a[i][m]=-1;
for(j=0;j<=m;j++)
a[0][j]=a[n][j]=-1;
}
void copiere()
{
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
b[i][j]=a[i][j];
}
void romeo()
{
prim=ultim=1;
c[prim]=pozr;
a[pozr.x][pozr.y]=2;
while(prim<=ultim)
{
p=c[prim];
prim++;
for(k=0;k<=7;k++)
{
v.x=p.x+ln[k];
v.y=p.y+col[k];
if(a[v.x][v.y]==0)
{
ultim++;
c[ultim]=v;
a[v.x][v.y]=a[p.x][p.y]+1;
}
}
}
}
void julieta()
{
b[pozj.x][pozj.y]=2;
prim=ultim=1;
c[prim]=pozj;
while(prim<=ultim)
{
p=c[prim];
prim++;
for(k=0;k<=7;k++)
{
v.x=p.x+ln[k];
v.y=p.y+col[k];
if(b[v.x][v.y]==0)
{
ultim++;
c[ultim]=v;
b[v.x][v.y]=b[p.x][p.y]+1;
}
}
}
}
void afisare()
{
n--;
m--;
int tmin=100000000,lin,col;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(a[i][j] == b[i][j] && a[i][j] > 1)
{
if(a[i][j] -1 < tmin)
{
tmin = a[i][j]-1 ;
lin = i;
col = j;
}
}
}
g<<tmin<<" "<<lin<<" "<<col;
}
int main()
{
citire();
bordare();
copiere();
romeo();
julieta();
afisare();
}