Cod sursa(job #1160776)

Utilizator AlexanderStanciuAlexander Stanciu AlexanderStanciu Data 30 martie 2014 19:40:01
Problema Car Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.11 kb
#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);


}