Cod sursa(job #342636)

Utilizator bog29Antohi Bogdan bog29 Data 22 august 2009 16:40:55
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
#define dmax 52
using namespace std;
ifstream in("kdrum.in");
ofstream out("kdrum.out");
int mat[dmax][dmax];
short int n,m,q,x1,y1,x2,y2;
const int dx[]={99,0,1,0,-1};
const int dy[]={99,-1,0,1,0};
struct queue
{	short int x;
	short int y;
	short int pas;
	long cst;
	short int rx;
	short int ry;
}	c[dmax*dmax];
int bune(short int i,short int j)
{	return ((i>0)&&(i<=n)&&(j>0)&&(j<=m));
}
void lee()
{	short int p1=1,p2=1,k,ii,jj;
	c[p1].x=x1;
	c[p1].y=y1;
	c[p1].pas=1;
	c[p1].cst=mat[x1][y1];
	c[p1].rx=-1;
	c[p1].ry=-1;
	while(p1<=p2)
	{	for(k=1;k<=4;k++)
		{	ii=c[p1].x+dx[k];
			jj=c[p1].y+dy[k];
			if(bune(ii,jj))
			{	if((ii!=c[p1].rx)&&(jj!=c[p1].ry))	
				{	p2++;
					c[p2].x=ii;
					c[p2].y=jj;
					c[p2].pas=c[p1].pas+1;
					c[p2].cst=c[p1].cst*mat[ii][jj];
					c[p2].rx=c[p1].x;
					c[p2].ry=c[p1].y;
					if((ii==x2)&&(jj==y2)&&(c[p2].cst%q==0))
					{	out<<c[p2].pas;	
						return;
					}	
				}
			}
		}
		p1++;
	}	
}				
int main()
{	short int i,j;
	in>>n>>m>>q;
	in>>x1>>y1>>x2>>y2;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			in>>mat[i][j];
	in.close();
	lee();	
	out.close();
	return 0;
}