Pagini recente » Cod sursa (job #269267) | Cod sursa (job #2561313) | Cod sursa (job #2675400) | Cod sursa (job #1010522) | Cod sursa (job #445103)
Cod sursa(job #445103)
#include <stdio.h>
#include <queue>
using namespace std;
FILE *f,*s;
int m,n,i,j,xr,yr,xj,yj,a,b,c,v1[150][150],v4[150][150];
char ch;
struct punct
{
int x;
int y;
};
queue <punct> v2;
punct p1,p2,v3[5]={{-1,0},{1,0},{0,-1},{0,1}};
void Lee1(int x1, int y1)
{
p1.x=x1;
p1.y=y1;
v2.push(p1);
p2=p1;
while(v2.size())
{
p1=v2.front();
v2.pop();
p2=p1;
for(i=0;i<=3;i++)
{
p1=p2;
p1.x+=v3[i].x;
p1.y+=v3[i].y;
if(p1.x>=1&&p1.x<=m&&p1.y>=1&&p1.y<=n&&v1[p1.x][p1.y]>=0&&((v1[p1.x-v3[i].x][p1.y-v3[i].y]+1)<v1[p1.x][p1.y] || v1[p1.x][p1.y]==0))
{
v2.push(p1);
v1[p1.x][p1.y]=v1[p1.x-v3[i].x][p1.y-v3[i].y]+1;
}
}
}
}
void Lee2(int x1, int y1)
{
p1.x=x1;
p1.y=y1;
v2.push(p1);
p2=p1;
while(v2.size())
{
p1=v2.front();
v2.pop();
p2=p1;
for(i=0;i<=3;i++)
{
p1=p2;
p1.x+=v3[i].x;
p1.y+=v3[i].y;
if(p1.x>=1&&p1.x<=m&&p1.y>=1&&p1.y<=n&&v4[p1.x][p1.y]>=0&&((v4[p1.x-v3[i].x][p1.y-v3[i].y]+1)<v4[p1.x][p1.y] || v4[p1.x][p1.y]==0))
{
v2.push(p1);
v4[p1.x][p1.y]=v4[p1.x-v3[i].x][p1.y-v3[i].y]+1;
}
}
}
}
int main()
{
f=fopen("rj.in","r");
s=fopen("rj.out","w");
fscanf(f,"%d %d\n",&m,&n);
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
fscanf(f,"%c",&ch);
if(ch=='X')
v1[i][j]=-1;
if(ch==' ')
v1[i][j]=0;
if(ch=='R')
{
v1[i][j]=1;
xr=i;
yr=j;
}
if(ch=='J')
{
v1[i][j]=1;
xj=i;
yj=j;
}
v4[i][j]=v1[i][j];
}
fscanf(f,"\n");
}
Lee1(xr,yr);
Lee2(xj,yj);
a=10000;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(v1[i][j]>0 && v1[i][j]==v4[i][j] && v1[i][j]<a)
{
a=v1[i][j];
b=i;
c=j;
}
}
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
printf("%d %d\n",v1[12][2],v4[12][2]);
}
fprintf(s,"%d %d %d",a,b,c);
fclose(s);
return 0;
}