Cod sursa(job #96836)

Utilizator silviu982001Borsan Silviu silviu982001 Data 3 noiembrie 2007 21:41:01
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
int main()
{int rom[102][102],jul[102][102],v[5][3],i,j,n,m,min,x,y,k,ok;
 char c;
 FILE *f;
 f=fopen("rj.in","r");
 fscanf(f,"%d%d\n",&n,&m);
 for(i=1;i<=n;i++)
 {
	for(j=1;j<=m;j++)
		{
		   fscanf(f,"%c",&c);
		   /*printf("\n%c",c);getch();*/
		   if (c=='R') {rom[i][j] = 0;jul[i][j] = -1;}
			else if (c=='J') {rom[i][j] = -1;jul[i][j] = 0;}
				else if (c=='X') {rom[i][j] = -2;jul[i][j] = -2;}
					else {rom[i][j]=-1;jul[i][j]=-1;}
		}
	fscanf(f,"\n");}
 v[1][1] = -1;v[1][2] = 0;
 v[2][1] = 1;v[2][2] = 0;
 v[3][1] = 0;v[3][2] = 1;
 v[4][1] = 0;v[4][2] = -1;
 min = 0;
 do
	{ok=0;
	 for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if (rom[i][j]==min)
				{
				 for(k=1;k<=4;k++)
					{x = i + v[k][1];
					 y = j + v[k][2];
					 if ((rom[x][y] == -1) || (rom[x][y] > min)) {rom[x][y] = min+1;
											ok=1;}}
				 }
	 min+=1;}
 while (ok==1);
 min=0;
 do
	{ok=0;
	 for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if (jul[i][j]==min)
				{
				 for(k=1;k<=4;k++)
					{x = i + v[k][1];
					 y = j + v[k][2];
					 if ((jul[x][y] == -1) || (jul[x][y] > min)) {jul[x][y] = min+1;
											ok=1;}}
				 }
	 min+=1;}
 while (ok==1);
 min=32000;
 for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
		if ((rom[i][j]==jul[i][j])&&(rom[i][j] > 0)&&(rom[i][j] < min)) {min=rom[i][j];x=i;y=j;}
 f=fopen("rj.out","w");
 fprintf(f,"%d %d %d",x,y,min);
 fclose(f);
 return 0;}