Cod sursa(job #778085)

Utilizator lucian666Vasilut Lucian lucian666 Data 13 august 2012 21:54:16
Problema Kdrum Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb


#include<fstream>
#include<utility>
#include<queue>

#define mp make_pair
#define f first
#define s second
#define NN 51


using namespace std;
ofstream out("kdrum.out");

const int di[]={0,0,1,-1};
const int dj[]={1,-1,0,0};

int a[NN][NN],d[NN][NN],n,m,K;
queue<pair<int , int > > Q;

pair<int,int >start,finish;

bool inside( int i ,int j)
{
	if ( i>=1 && i<=n && j>=1 && j<=m )
		return true;
	return false;
}



void read();
void LEE();	
void write(int a[NN][NN],int ,int );

int main()
{
	read();
	LEE();
	out<<d[finish.f][finish.s];
	//write(d,n,m);
	return 0;
}

void read()
{
	ifstream in("kdrum.in");
	in>>n>>m>>K;
	in>>start.f>>start.s>>finish.f>>finish.s;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			in>>a[i][j];
		for(int i=1;i<=n;++i)
			for(int j=1;j<=m;j++)
			{
				if(a[i][j] > 0)
					d[i][j]=0;
				else
					d[i][j]=-1;
			}
		Q.push(mp(start.f,start.s));
		d[start.f][start.s]=1;
}

void LEE()
{
	int i,j,ii,jj,k;
	while(!Q.empty())
	{
		i=Q.front().f;
		j=Q.front().s;
			for( k=0 ; k < 4; k++)
			{
				ii=i+di[k];
				jj=j+dj[k];
				if (ii>=1 && ii<=n && jj>=1 && jj<=m && (d[ii][jj] ==0 )  )
				{
					
					d[ii][jj] =d[i][j] + 1;
					Q.push(mp(ii,jj));
					
				}
			}
			Q.pop();
	}
}

void write(int a[NN][NN],int n,int m)
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
			out<<a[i][j]<<" ";
		out<<'\n';
	}
	
}