Cod sursa(job #384701)

Utilizator johsonsbabiJohnsons Babi Minune johsonsbabi Data 20 ianuarie 2010 19:17:51
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <stdio.h>

FILE*f=fopen("rj.in","r");
FILE*g=fopen("rj.out","w");

int a[101][101],i,j,n,m,b[101][101];
int d[2][8] = {{-1,0,1,1,1,0,-1,-1},{1,1,1,0,-1,-1,-1,0}};
int c[2][10010],p,u,x,y;
int solx,soly,sol;
void citire(){
	char ch;
	fscanf(f,"%d %d",&n,&m);
	fscanf(f,"%c",&ch);
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			fscanf(f,"%c",&ch);
			if(ch=='X')
				a[i][j]=-1;
			else if(ch==32)
				a[i][j]=0;
			else if(ch=='R'){
				a[i][j]=1;
				c[0][1]=i;
				c[1][1]=j;
				b[i][j]=1;
			}
			else {
				a[i][j]=1;
				c[0][2]=i;
				c[1][2]=j;
				b[i][j]=2;
			}
		}
		fscanf(f,"%c",&ch);
	}
}

void li(){
	p=1;
	u=2;
	while(p<=u){
		x=c[0][p];
		y=c[1][p];
		for(i=0;i<8;i++){
			if(x+d[0][i]<=n && x+d[0][i]>0 && y+d[1][i]<=m && y+d[1][i]>0){
				if(!a[x+d[0][i]][y+d[1][i]]){
					u++;
					a[x+d[0][i]][y+d[1][i]]=a[x][y]+1;
					c[0][u] = x+d[0][i];
					c[1][u] = y+d[1][i];
					b[x+d[0][i]][y+d[1][i]]=b[x][y];
				}
				else if(b[x+d[0][i]][y+d[1][i]]!=b[x][y] && a[x+d[0][i]][y+d[1][i]]==a[x][y]+1){
					if(sol>=a[x+d[0][i]][y+d[1][i]]){
						if(solx>x+d[0][i]){
							solx=x+d[0][i];
							soly=y+d[1][i];
							sol=a[x+d[0][i]][y+d[1][i]];
						}
						else if(solx==x+d[0][i]){
							if(soly>y+d[1][i]){
								solx=x+d[0][i];
								soly=y+d[1][i];
								sol=a[x+d[0][i]][y+d[1][i]];
							}
						}
					}
				}
			}
		}
		p++;
	}
}

int main(){
	
	citire();
	solx=soly=101;
	sol=1222222;
	li();
	fprintf(g,"%d %d %d",solx,soly,sol);
	fclose(f);
	fclose(g);
	return 0;
}