Pagini recente » Cod sursa (job #2038069) | Cod sursa (job #2078564) | Cod sursa (job #2492336) | Cod sursa (job #2005299) | Cod sursa (job #385464)
Cod sursa(job #385464)
#include<stdio.h>
#include<fstream>
using namespace std;
FILE *f;
struct cuvant{int x,y;}c[20000];
struct matrice{int val,ind;}a[205][205];
int n,m,i,j,ic=1,sc=0,lun=32000,xx,yy;
char cc,linie[105];
void lant(int x,int y)
{
while(ic<=sc)
{
if(a[x-1][y-1].val==a[x][y].val+1&&a[x-1][y-1].ind!=a[x][y].ind)
{if(lun>a[x][y].val+1)
{lun=a[x][y].val+1;xx=x-1;yy=y-1;}
if(lun==a[x][y].val+1&&yy>y-1)
{xx=x-1;yy=y-1;}
}
else
if(a[x-1][y-1].val==0&&x-1>=1&&y-1>=1)
{sc++;
c[sc].x=x-1;
c[sc].y=y-1;
a[x-1][y-1].val=a[x][y].val+1;
a[x-1][y-1].ind=a[x][y].ind;}
if(a[x-1][y].val==a[x][y].val+1&&a[x-1][y].ind!=a[x][y].ind)
{if(lun>a[x][y].val+1)
{lun=a[x][y].val+1;xx=x-1;yy=y;}
if(lun==a[x][y].val+1&&yy>y)
{xx=x-1;yy=y;}
}
else
if(a[x-1][y].val==0&&x-1>=1)
{sc++;
c[sc].x=x-1;
c[sc].y=y;
a[x-1][y].val=a[x][y].val+1;
a[x-1][y].ind=a[x][y].ind;}
if(a[x-1][y+1].val==a[x][y].val+1&&a[x-1][y+1].ind!=a[x][y].ind)
{if(lun>a[x][y].val+1)
{lun=a[x][y].val+1;xx=x-1;yy=y+1;}
if(lun==a[x][y].val+1&&yy>y+1)
{xx=x-1;yy=y+1;}
}
else
if(a[x-1][y+1].val==0&&x-1>=1&&y+1<=m)
{sc++;
c[sc].x=x-1;
c[sc].y=y+1;
a[x-1][y+1].val=a[x][y].val+1;
a[x-1][y+1].ind=a[x][y].ind;}
if(a[x][y-1].val==a[x][y].val+1&&a[x][y-1].ind!=a[x][y].ind)
{if(lun>a[x][y].val+1)
{lun=a[x][y].val+1;xx=x;yy=y-1;}
if(lun==a[x][y].val+1&&yy>y-1)
{xx=x;yy=y-1;}
}
else
if(a[x][y-1].val==0&&y-1>=1)
{sc++;
c[sc].x=x;
c[sc].y=y-1;
a[x][y-1].val=a[x][y].val+1;
a[x][y-1].ind=a[x][y].ind;}
if(a[x+1][y-1].val==a[x][y].val+1&&a[x+1][y-1].ind!=a[x][y].ind)
{if(lun>a[x][y].val+1)
{lun=a[x][y].val+1;xx=x+1;yy=y-1;}
if(lun==a[x][y].val+1&&yy>y-1)
{xx=x+1;yy=y-1;}
}
else
if(a[x+1][y-1].val==0&&x+1<=n&&y-1>=1)
{sc++;
c[sc].x=x+1;
c[sc].y=y-1;
a[x+1][y-1].val=a[x][y].val+1;
a[x+1][y-1].ind=a[x][y].ind;}
if(a[x+1][y].val==a[x][y].val+1&&a[x+1][y].ind!=a[x][y].ind)
{if(lun>a[x][y].val+1)
{lun=a[x][y].val+1;xx=x+1;yy=y;}
if(lun==a[x][y].val+1&&yy>y)
{xx=x+1;yy=y;}
}
else
if(a[x+1][y].val==0&&x+1<=n)
{sc++;
c[sc].x=x+1;
c[sc].y=y;
a[x+1][y].val=a[x][y].val+1;
a[x+1][y].ind=a[x][y].ind;}
if(a[x+1][y+1].val==a[x][y].val+1&&a[x+1][y+1].ind!=a[x][y].ind)
{if(lun>a[x][y].val+1)
{lun=a[x][y].val+1;xx=x+1;yy=y+1;}
if(lun==a[x][y].val+1&&yy>y+1)
{xx=x+1;yy=y+1;}
}
else
if(a[x+1][y+1].val==0&&x+1<=n&&y+1<=m)
{sc++;
c[sc].x=x+1;
c[sc].y=y+1;
a[x+1][y+1].val=a[x][y].val+1;
a[x+1][y+1].ind=a[x][y].ind;}
if(a[x][y+1].val==a[x][y].val+1&&a[x][y+1].ind!=a[x][y].ind)
{if(lun>a[x][y].val+1)
{lun=a[x][y].val+1;xx=x;yy=y+1;}
if(lun==a[x][y].val+1&&yy>y+1)
{xx=x;yy=y+1;}
}
else
if(a[x][y+1].val==0&&y+1<=m)
{sc++;
c[sc].x=x;
c[sc].y=y+1;
a[x][y+1].val=a[x][y].val+1;
a[x][y+1].ind=a[x][y].ind;}
ic++;
lant(c[ic].x,c[ic].y);
}
}
int main()
{
f=fopen("rj.in","r");
ifstream ff("rj.in");
ofstream g("rj.out");
ff>>n>>m;
fgets(linie,100,f);
for(i=1;i<=n;i++)
{fgets(linie,100,f);
for(j=0;j<m;j++)
{cc=linie[j];
if(cc=='X')
a[i][j+1].val=-1;
else
if(cc=='R')
{ a[i][j+1].val=1;
a[i][j+1].ind=1;
sc++;
c[sc].x=i;
c[sc].y=j+1;
}
else
if(cc=='J')
{ a[i][j+1].val=1;
a[i][j+1].ind=2;
sc++;
c[sc].x=i;
c[sc].y=j+1;
}
}}
lant(c[ic].x,c[ic].y);
g<<lun<<" "<<xx<<" "<<yy;
return 0;}