Pagini recente » Cod sursa (job #2459485) | Cod sursa (job #2603799) | Cod sursa (job #1232516) | Cod sursa (job #106622) | Cod sursa (job #2129515)
#include <fstream>
#include <queue>
#include <algorithm>
#define INF 1000000
using namespace std;
int dl[4]= {-1,0,1,0};
int dc[4]= {0,1,0,-1};
ifstream fi("taxe2.in");
ofstream fo("taxe2.out");
int n,m,b;
int A[101][101];
int VIZ[101][101];
int l1,c1,l2,c2;
int cmp(pair<int,int>a,pair<int,int>b)
{
if(A[a.first][a.second]>A[b.first][b.second])
return 1;
return 0;
}
deque < pair<int, int> > Q;
int main()
{
fi>>b>>n;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{
fi>>A[i][j];
VIZ[i][j]=INF;
}
/// traversare bf modificata
VIZ[1][1]=0;
Q.push_back({1,1});
while (!Q.empty())
{
pair <int, int> aux;
aux=Q.front();
Q.pop_front();
pair <int, int> s[3];
for (int d=0; d<=3; d++)
{
int lnou,cnou;
lnou=aux.first+dl[d];
cnou=aux.second+dc[d];
s[d]= {lnou,cnou};
}
sort(s,s+3,cmp);
for (int d=0; d<=3; d++)
{
int lnou,cnou;
lnou=s[d].first;
cnou=s[d].second;
int mini=INF;
if (lnou>=1 && lnou<=n && cnou>=1 && cnou<=m)
if (VIZ[lnou][cnou]+A[lnou][cnou]<mini)
{
VIZ[lnou][cnou]=3;
Q.push_back({lnou,cnou});
}
else
{
if (VIZ[lnou][cnou]>VIZ[aux.first][aux.second]+1)
{
VIZ[lnou][cnou]=VIZ[aux.first][aux.second]+1;
Q.push_back({lnou,cnou});
}
}
}
}
fo<<VIZ[l2][c2];
fi.close();
fo.close();
return 0;
}