Cod sursa(job #1347738)

Utilizator GinguIonutGinguIonut GinguIonut Data 19 februarie 2015 10:18:39
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("wow.in");
ofstream fout("wow.out");
const int dx[]={0,1,0,-1};
const int dy[]={1,0,-1,0};
short int sum[101][101],drum[101][101],n,p,m,i,j,x,y,q[2][10200],a[101][101],l,c,lin,col;
int u,start,Min;
bool viz[101][101];
int main()
{
    fin>>n>>p>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=p;j++)
            fin>>a[i][j];
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        x+=1;
        y+=1;
        u=start=1;
        q[0][u]=x;
        q[1][u]=y;
        while(start<=u)
        {
            x=q[0][start];
            y=q[1][start];
            for(i=0;i<=3;i++)
            {
                l=x+dx[i];
                c=y+dy[i];
                if(a[l][c]!=-1&&viz[l][c]==0&&l>=1&&l<=n+1&&c>=1&&c<=p+1)
                {
                    a[l][c]=a[x][y]+1;
                    q[0][++u]=l;
                    q[1][u]=c;
                    sum[l][c]+=a[l][c];
                    viz[l][c]=1;
                    drum[l][c]++;
                }
            }
            start++;
        }
        memset(viz,0,sizeof(viz));
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=p;j++)
        {
            if(sum[l][c]<=Min&&drum[l][c]==m)
            {
                Min=sum[l][c];
                lin=l;
                col=c;
            }
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=p;j++)
            fout<<sum[i][j]<<" ";
            fout<<'\n';
    }
    fout<<Min<<'\n';
    fout<<lin<<col;
    return 0;
}