Pagini recente » Cod sursa (job #3247022) | Cod sursa (job #2710490) | Cod sursa (job #1331999) | Cod sursa (job #2527590) | Cod sursa (job #1398364)
//#include <iostream>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <vector>
#include <bitset>
#include <limits>
#include <fstream>
#include <cstring>
#include <iomanip>
#include <cstdlib>
#include <algorithm>
using namespace std;
ifstream cin("matrice2.in");
ofstream cout("matrice2.out");
#define nmax 310
#define mod 1000007
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define inf numeric_limits<int>::max()
#define forv(v,it) for (vector<int>::iterator it=v.begin();it!=v.end();it++)
int n,query,st,dr,inq[nmax][nmax],a[nmax][nmax],b[nmax][nmax];
int dirLin[]={0,1,0,-1},dirCol[]={1,0,-1,0};
struct elem
{
int lin,col;
}ps,pf,p,v,q[(nmax*nmax)<<1];
int main()
{
int i,j,k;
cin>>n>>query;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
cin>>a[i][j];
for (i=0;i<=n+1;i++) a[i][0]=a[i][n+1]=-1;
for (j=0;j<=n+1;j++) a[0][j]=a[n+1][j]=-1;
for (;query;query--)
{
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
b[i][j]=0;
cin>>ps.lin>>ps.col;
cin>>pf.lin>>pf.col;
st=dr=1;
q[dr]=ps;
inq[ps.lin][ps.col]=1;
b[ps.lin][ps.col]=a[ps.lin][ps.col];
while (st<=dr)
{
p=q[st++];
inq[p.lin][p.col]=0;
for (k=0;k<4;k++)
{
v.lin=p.lin+dirLin[k];
v.col=p.col+dirCol[k];
if (a[v.lin][v.col]>0)
{
if (!b[v.lin][v.col])
{
b[v.lin][v.col]=min(a[v.lin][v.col],b[p.lin][p.col]);
inq[v.lin][v.col]=1;
q[++dr]=v;
}
else if (b[p.lin][p.col]>b[v.lin][v.col])
{
b[v.lin][v.col]=min(a[v.lin][v.col],b[p.lin][p.col]);
if (!inq[v.lin][v.col])
{
inq[v.lin][v.col]=1;
q[++dr]=v;
}
}
}
}
/*for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
cout<<b[i][j]<<" ";
cout<<'\n';
}
cout<<'\n';*/
}
cout<<b[pf.lin][pf.col]<<'\n';
}
}