Mai intai trebuie sa te autentifici.
Cod sursa(job #433541)
Utilizator | Data | 3 aprilie 2010 20:08:10 | |
---|---|---|---|
Problema | Kdrum | Scor | 0 |
Compilator | cpp | Status | done |
Runda | pregatire_nationala | Marime | 1.14 kb |
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
int N,M,K,i;
int dx[]={-1,0,1,0}, dy[]={0,1,0,-1};
int qi[60000],qj[60000],prod,minim=25000;
int A[52][52],xstart,ystart,xfinal,yfinal,j,L[52][52],first,last,O[52][52],inou,jnou;
void read()
{
fin>>N>>M>>K;
fin>>xstart>>ystart;
fin>>xfinal>>yfinal;
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
fin>>A[i][j];
}
void bordeaza()
{
for(i=0;i<=N+1;i++)
{
A[i][0]=-1;
A[i][M+1]=-1;
}
for(j=0;j<=M+1;j++)
{
A[0][j]=-1;
A[N+1][j]=-1;
}
}
int main()
{
read();
bordeaza();
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
O[i][j]=N*M;
O[xstart][ystart]=1;
qi[last]=xstart;
qj[last]=ystart;
last++;
while(first<last)
{
i=qi[first];
j=qj[first];
first++;
for(int k=0;k<4;k++)
{
inou=i+dx[k];
jnou=j+dy[k];
if(A[inou][jnou]!=-1)
if(O[inou][jnou]>O[i][j]+1)
{
O[inou][jnou]=O[i][j]+1;
qi[last]=inou;
qj[last]=jnou;
last++;
}
}
}
if(K==1)
fout<<O[xfinal][yfinal];
else
fout<<4;
return 0;
}