All pastes #897788 Raw Edit

Unnamed

public text v1 · immutable
·published 2008-02-09 20:59 UTC
rendered paste body
#include <iostream>
#include <queue>
#include <fstream>

using namespace std;

const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};

int map[178][178];
int n,nrfa,cx,cy,kx,ky;

struct elem
{
 signed short x;
 signed short y;
 signed short d;
};

void read_data()
{
 int fx,fy;
 ifstream in;
 in.open("alee.in");
 in >> n;
 in >> nrfa;
 for(int i=1;i<=nrfa;i++)
 {
  in >> fx;
  in >> fy;
  map[fx][fy]=-1;
 };
 in >> kx;
 in >> ky;
 in >> cx;
 in >> cy;
 in.close(); 
};

void initMap()
{
 for(int i=1;i<=n;i++)
  {
   for(int j=1;j<=n;j++)
    { 
     if (map[i][j]==0) map[i][j]=-2;
    };
  };
 map[kx][ky]=0;
}

void generateLeeNumbers()
{ 
 //Put the first element into the queue
 queue <elem> sor;
 elem e;
 e.x=kx;
 e.y=ky;
 e.d=0;
 sor.push(e);
 elem test=sor.front();
 //Let's do the lee
 while((!sor.empty())&&(map[cx][cy]==-2))
 {
  elem x=sor.front();
  sor.pop();
  for(int k=0;k<=3;k++) 
  {
   elem y;
   y.x=x.x+dx[k];
   y.y=x.y+dy[k];
   if((y.x<=n)&&(y.y<=n))
   {
    if(map[y.x][y.y]==-2) 
     {
      y.d=x.d+1;
      map[y.x][y.y]=y.d;
      sor.push(y);
     };
   }; 
  };
 };
};

void writeResult()
{
 ofstream out;
 out.open("alee.out");
 out << map[cx][cy]+1;
 out.close();
};

int main()
{
 read_data();
 initMap();
 generateLeeNumbers();
 writeResult();
 return 0;
}