Pagini recente » Cod sursa (job #2522759) | Cod sursa (job #39663) | Cod sursa (job #379988) | Cod sursa (job #533293) | Cod sursa (job #634954)
Cod sursa(job #634954)
#include<fstream>
#include<queue>
using namespace std;
ifstream in("car.in");
ofstream out("car.out");
int N,M,Si,Sj,Fi,Fj,cost=0, a[501][501],costfinal;
int const dx[]={-1,-1,-1,0,0,1,1,1}, dy[]={-1,0,1,-1,1,-1,0,1};
queue<int>c;
void Read()
{
in>>N>>M;
in>>Si>>Sj>>Fi>>Fj;
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
in>>a[i][j];
}
void Bfs()
{
int i,j,lin,col,var,var2;
c.push(Si);
c.push(Sj);
while(!c.empty())
{
i=c.front();
c.pop();
j=c.front();
c.pop();
for(int dir=0;dir<8;dir++)
{
if(a[i+dx[dir]][j+dy[dir]]==0 && a[i][j]!=a[Si][Sj])
{
lin=i+dx[dir];
col=j+dy[dir];
c.push(lin);
c.push(col);
var=dx[dir];
var2=dy[dir];
if(var!=0 && var<0)
cost+=-(var);
if(var!=0 && var>0)
cost+=var;
if(var2!=0 && var2<0)
cost+=-(var2);
if(var2!=0 && var2>0)
cost+=var2;
if(lin==Fi && col==Fj)
costfinal=cost;
}
else if(a[i+dx[dir]][j+dy[dir]]==0 && a[i][j]==a[Si][Sj])
{
lin=i+dx[dir];
col=j+dy[dir];
c.push(lin);
c.push(col);
}
}
}
}
int main()
{
Read();
Bfs();
out<<costfinal;
}