Pagini recente » Cod sursa (job #723309) | Cod sursa (job #272262) | Cod sursa (job #2349250) | Cod sursa (job #1116894) | Cod sursa (job #362200)
Cod sursa(job #362200)
Utilizator |
Cristi Cristi09 |
Data |
8 noiembrie 2009 14:36:00 |
Problema |
Rj |
Scor |
0 |
Compilator |
cpp |
Status |
done |
Runda |
CNRV #4 |
Marime |
1.8 kb |
#include<fstream.h>
#include<string.h>
struct nod
{
int x,y,val;
nod*leg;
}*prim,*p,*q;
int a[105][105],n,m,val;
void adauga(int i,int j);
int main()
{
prim=new nod;q=new nod;
prim->leg=NULL;
q=prim;
ifstream f("rj.in");
f>>n>>m;
int i,j,xr,yr,xj,yj;
char var,v[105];
for(i=0;i<=n+1;++i)
for(j=0;j<=m+1;++j)
if(i==0||j==0||i==n+1||j==n+1)a[i][j]=-2;
f.getline(v,100);
for(i=1;i<n+1;++i)
{
f.getline(v,105);
if(strlen(v)==m-1)v[strlen(v)]=' ';
for(j=1;j<m+1;++j)
{
switch(v[j-1])
{
case 'R':{
a[i][j]=0;
p=new nod;
p->leg=NULL;prim->leg=p;
p->x=xr=i;p->y=yr=j;p->val=0;
break;
}
case 'J':{
a[i][j]=30000;
xj=i;yj=j;
break;
}
case 'X':{
a[i][j]=-2;
break;
}
case ' ':{
a[i][j]=30000;
break;
}
}
}
}
f.close();
q=prim;int cont;
while(prim->leg)
{
p=prim->leg;
prim->leg=p->leg;
val=p->val+1;
i=p->x;j=p->y;
delete p;
if(prim->leg==NULL)q=prim;
cont=0;
while(cont<8)
{
switch(cont)
{
case 0:{adauga(i-1,j);break;}
case 1:{adauga(i+1,j);break;}
case 2:{adauga(i,j+1);break;}
case 3:{adauga(i,j-1);break;}
case 4:{adauga(i-1,j-1);break;}
case 5:{adauga(i+1,j-1);break;}
case 6:{adauga(i-1,j+1);break;}
case 7:{adauga(i+1,j+1);break;}
}
cont++;
}
}
val=a[xj][yj]/2;
for(i=1;i<n+1;i++)
for(j=1;j<m+1;j++)
if(a[i][j]==val){xr=i;yr=j;j=m;i=n;}
ofstream g("rj.out");
g<<val+1<<" "<<xr<<" "<<yr;
g.close();
return 0;
}
void adauga(int i,int j)
{
if(a[i][j]>val)
{
p=new nod;
p->leg=NULL;
q->leg=p;
a[i][j]=val;
p->val=val;
p->x=i;
p->y=j;
q=p;
}
}