Pagini recente » Istoria paginii preoni-2008/clasament/runda-3/10 | Cod sursa (job #2973839) | Cod sursa (job #1043300) | Cod sursa (job #2392675) | Cod sursa (job #592894)
Cod sursa(job #592894)
#include<stdio.h>
int cx[10001],cy[10001];
int v[101][101];
int main()
{
int n,m,i,j,min=9999,k=0,a,b,x,y,st,fi,d,ok=0,drum;
char c;
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");
fscanf(f,"%d %d%c",&n,&m,&c);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
fscanf(f,"%c",&c);
if (c=='X') v[i][j]=1;
if (c==' ') v[i][j]=0;
if (c=='R') {a=i;b=j;}
if (c=='J') {x=i;y=j;}
if (c=='\n') j--;
}
st=fi=1;
v[a][b]=1;
cx[1]=a;
cy[1]=b;
k=1;
do
{
ok=1;
d=0;
for (i=st;i<=fi;i++)
{
if (cx[i]<n)if (v[cx[i]+1][cy[i]]==0) {v[cx[i]+1][cy[i]]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]+1;cy[k]=cy[i];}
if (cx[k]==x&&cy[k]==y) break;
if (cy[i]<m)if (v[cx[i]][cy[i]+1]==0) {v[cx[i]][cy[i]+1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i];cy[k]=cy[i]+1;}
if (cx[k]==x&&cy[k]==y) break;
if (cx[i]>1)if (v[cx[i]-1][cy[i]]==0) {v[cx[i]-1][cy[i]]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]-1;cy[k]=cy[i];}
if (cx[k]==x&&cy[k]==y) break;
if (cy[i]>1)if (v[cx[i]][cy[i]-1]==0) {v[cx[i]][cy[i]-1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i];cy[k]=cy[i]-1;}
if (cx[k]==x&&cy[k]==y) break;
if (cx[i]>1&&cy[i]>1)if (v[cx[i]-1][cy[i]-1]==0) {v[cx[i]-1][cy[i]-1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]-1;cy[k]=cy[i]-1;}
if (cx[k]==x&&cy[k]==y) break;
if (cy[i]<m&&cx[i]>1)if (v[cx[i]+1][cy[i]-1]==0) {v[cx[i]+1][cy[i]-1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]+1;cy[k]=cy[i]-1;}
if (cx[k]==x&&cy[k]==y) break;
if (cx[i]>1&&cy[i]<m)if (v[cx[i]-1][cy[i]+1]==0) {v[cx[i]-1][cy[i]+1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]-1;cy[k]=cy[i]+1;}
if (cx[k]==x&&cy[k]==y) break;
if (cy[i]<m&&cx[i]<n)if (v[cx[i]+1][cy[i]+1]==0) {v[cx[i]+1][cy[i]+1]=v[cx[i]][cy[i]]+1;ok=0;d++;k++;cx[k]=cx[i]+1;cy[k]=cy[i]+1;}
if (cx[k]==x&&cy[k]==y) break;
}
st=fi+1;
fi+=d;
}
while (ok==0);
drum=v[x][y]+1;
fprintf(g,"%d ",drum/2);
k=1;
while (k-1!=(v[x][y]-1)/2)
{
if (v[a+1][b-1]==k+1) {b--;a++;k++;}
if (k-1==(v[x][y]-1)/2) break;
if (v[a-1][b-1]==k+1) {b--;a--;k++;}
if (k-1==(v[x][y]-1)/2) break;
if (v[a+1][b+1]==k+1) {b++;a++;k++;}
if (k-1==(v[x][y]-1)/2) break;
if (v[a-1][b+1]==k+1) {b++;a--;k++;}
if (k-1==(v[x][y]-1)/2) break;
if (v[a+1][b]==k+1) {a++;k++;}
if (k-1==(v[x][y]-1)/2) break;
if (v[a][b+1]==k+1) {b++;k++;}
if (k-1==(v[x][y]-1)/2) break;
if (v[a-1][b]==k+1) {a--;k++;}
if (k-1==(v[x][y]-1)/2) break;
if (v[a][b-1]==k+1) {b--;k++;}
if (k-1==(v[x][y]-1)/2) break;
}
fprintf(g,"%d %d",a,b);
return 0;
}