Pagini recente » Cod sursa (job #622165) | Cod sursa (job #2929728) | Cod sursa (job #1474030) | Cod sursa (job #2883358) | Cod sursa (job #322946)
Cod sursa(job #322946)
#include <stdio.h>
#define N 305
using namespace std;
const int x[5]={-1,0,0,1};
const int y[5]={0,-1,1,0};
struct nod
{
int l,c,ind;
nod *next;
}*mat[N][N];
int n,q,xi,xf,yi,yf,inc,sf;
int rez[N][N];
int cost[N][N];
int Qx[5*N*N];
int Qy[5*N*N];
int viz[N][N];
int rezultat[20010];
void citire()
{
freopen ("matrice2.in","r",stdin);
freopen ("matrice2.out","w",stdout);
scanf ("%d %d",&n,&q);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
{
scanf ("%d",&cost[i][j]);
mat[i][j]=NULL;
}
}
void baga(int i)
{
nod *q=new nod;
q->l=xf;
q->c=yf;
q->ind=i;
q->next=mat[xi][yi];
mat[xi][yi]=q;
}
void solve()
{
for (int i=0;i<q;i++)
{
scanf ("%d %d %d %d",&xi,&yi,&xf,&yf);
baga(i);
}
}
int mini(int a,int b)
{
return a<b?a:b;
}
int maxi(int a,int b)
{
return a>b?a:b;
}
void calc(int l1,int c1)
{
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
rez[i][j]=0;
int L,C,L1,C1;
inc=0;
sf=1;
Qx[0]=l1;
Qy[0]=c1;
viz[l1][c1]=1;
rez[l1][c1]=cost[l1][c1];
for (int i=0;i<sf;i++)
{
L=Qx[i];
C=Qy[i];
viz[L][C]=0;
for (int k=0;k<4;k++)
{
L1=L+x[k];
C1=C+y[k];
if (cost[L1][C1]!=0)
{
if (rez[L1][C1]==0)
{
rez[L1][C1]=mini(rez[L][C],cost[L1][C1]);
Qx[sf]=L1;
Qy[sf++]=C1;
}
else
{
if (mini(rez[L][C],cost[L1][C1])>rez[L1][C1])
{
rez[L1][C1]=mini(rez[L][C],cost[L1][C1]);
if (!viz[L1][C1])
{
viz[L1][C1]=1;
Qx[sf]=L1;
Qy[sf++]=C1;
}
}
}
}
}
}
for (nod *q=mat[l1][c1];q;q=q->next)
rezultat[q->ind]=rez[q->l][q->c];
}
void afisare()
{
for (int i=0;i<=n+1;i++)
for (int j=0;j<=n+1;j++)
viz[i][j]=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (mat[i][j]!=NULL)
{
calc(i,j);
}
for (int i=0;i<q;i++)
printf("%d\n",rezultat[i]);
}
int main()
{
citire();
solve();
afisare();
return 0;
}