Pagini recente » Cod sursa (job #2629676) | Cod sursa (job #2374379) | Cod sursa (job #2419991) | Cod sursa (job #811976) | Cod sursa (job #1160776)
#include<iostream>
#include<stdio.h>
using namespace std;
struct coord
{
int x; int y; int p;
};
coord coada[250000];
int i,j,ok,n,m,xi,yi,xf,yf,ic,sc,a[500][500];
struct coordonate
{
int x; int y;
};
coordonate d[8];
main()
{
d[0].x=-1; d[0].y=-1;
d[1].x=-1; d[1].y=0;
d[2].x=-1; d[2].y=1;
d[3].x=0; d[3].y=1;
d[4].x=1; d[4].y=1;
d[5].x=1; d[5].y=0;
d[6].x=1; d[6].y=-1;
d[7].x=0; d[7].y=-1;
FILE *pFile;
pFile=freopen("car.in","r",stdin);
scanf("%d%d",&n,&m);
scanf("%d%d%d%d",&xi,&yi,&xf,&yf);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{scanf("%d",&a[i][j]);
if(a[i][j]==0)
a[i][j]=50000000;
else
a[i][j]=-1;
}
fclose(stdin);
coada[0].x=xi;
coada[0].y=yi;
a[xi][yi]=0;
while(ic<=sc)
{
for(int c=0;c<=7;c++)
{
i=coada[ic].x;
j=coada[ic].y;
if(i==xf&&j==yf)
ok=1;
int cost,t;
if(c<=4)
if(coada[ic].p>c)
cost=coada[ic].p-c;
else
cost=c-coada[ic].p;
else
{
if(c==5)
t=3;
if(c==6)
t=2;
if(c==7)
t=1;
if(coada[ic].p>t)
cost=coada[ic].p-t;
else
cost=t-coada[ic].p;
}
if(ic==0)
cost=0;
if(a[i][j]+cost<a[i+d[c].x][j+d[c].y])
{a[i+d[c].x][j+d[c].y]=a[i][j]+cost;
sc++;
coada[sc].x=i+d[c].x;
coada[sc].y=j+d[c].y;
if(c<=4)
coada[sc].p=c;
if(c==5)
coada[sc].p=3;
if(c==6)
coada[sc].p=2;
if(c==7)
coada[sc].p=1;
}
}
ic++;
}
pFile=fopen("car.out","w");
fprintf (pFile, "%d",a[xf][yf]);
fclose(pFile);
}