Cod sursa(job #100687)

Utilizator georgepalPal George Catalin georgepal Data 12 noiembrie 2007 16:46:30
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.18 kb
#include<stdio.h>
#include<values.h>
typedef struct { int lin,col;} coada;
int main()
{
FILE *f,*g;
f=fopen("rj.in","r");
g=fopen("rj.out","w");
coada c[100],x;
int a[100][100],a1[100][100],i,j,p,u,x1,x2,y1,y2,n,m,min;
char q;
fscanf(f,"%d %d:,&n,&m);
for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
		{fscanf(f,"%c",&q);
		if(q==' ') a[i][j]=0;
		if(q=='R') {a[i][j]=1;x1=i;y1=j;}
		if(q=='J') {x2=i;y2=j;}
		if(q=='X') a[i][j]=-1;
		}
for(i=1;i<=n;i++)
	a[i][0]=a[0][i]=a[n+1][i]=a[i][n+1]=-1;
u=p=1;
x.lin=x1;
x.col=y1;
while(p>=u && a[x2][y2]==0)
	{c[p++]=x;
	if(a[x.lin-1][x.col]==0)  {a[x.lin-1][x.col]=a[x.lin][x.col]+1;
				  c[++u].lin=x.lin-1;
				  c[u].col=x.col;
				  }
	if(a[x.lin][x.col-1]==0) {a[x.lin][x.col-1]=a[x.lin][x.col]+1;
				  c[++u].lin=x.lin;
				  c[u].col=x.col-1;}
	if(a[x.lin+1][x.col]==0) {a[x.lin+1][x.col]=a[x.lin][x.col]+1;
				  c[++u].lin=x.lin+1;
				  c[u].col=x.col;}
	if(a[x.lin][x.col+1]==0) {a[x.lin][x.col+1]=a[x.lin][x.col]+1;
				  c[++u].lin=x.lin;
				  c[u].col=x.col+1;}}
if(a[x2][y2]==0) fprintf(g,"NU EXISTA SOLUTIE");
else {
for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
		{fscanf(f,"%c",&q);
		if(q==' ') a1[i][j]=0;
		if(q=='J') {x1=i;y1=j;a1[i][j]=1;}
		if(q=='R') {x2=i;y2=j;}
		if(q=='X') a1[i][j]=-1;}
for(i=1;i<=n;i++)
	a1[i][0]=a1[0][i]=a1[n+1][i]=a1[i][n+1]=-1;
u=p=1;
x.lin=x1;
x.col=y1;
while(p>=u && a1[x2][y2]==0)
	{c[p++]=x;
	if(a1[x.lin-1][x.col]==0)  {a1[x.lin-1][x.col]=a1[x.lin][x.col]+1;
				  c[++u].lin=x.lin-1;
				  c[u].col=x.col;
				  }
	if(a1[x.lin][x.col-1]==0) {a1[x.lin][x.col-1]=a1[x.lin][x.col]+1;
				  c[++u].lin=x.lin;
				  c[u].col=x.col-1;}
	if(a1[x.lin+1][x.col]==0) {a1[x.lin+1][x.col]=a1[x.lin][x.col]+1;
				  c[++u].lin=x.lin+1;
				  c[u].col=x.col;}
	if(a1[x.lin][x.col+1]==0) {a1[x.lin][x.col+1]=a[x.lin][x.col]+1;
				  c[++u].lin=x.lin;
				  c[u].col=x.col+1;}}
if(a1[x2][y2]==0) fprintf(g,"NU EXISTA SOLUTIE");
else {
	min=MAXINT;
	for(i=2;i<=n;i++)
		for(j=1;j<=n;j++)
			if(a[i][j]==a1[i][j]&&a[i][j]<min) min=a[i][j];
	fprintf(f,"%d ",min);
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]==min) fprintf(g,"%d %d", i,j);}}
fclose(f);fclose(g);return 0;}