#include<bits/stdc++.h>
using namespace std;
int n,m,k;
const int N=1002;
int a[N][N];
int dis[42][N][N];
vector<pair<int,int> > v[42];
int dx[]={0,1,-1,0,0};
int dy[]={0,0,0,1,-1};
struct no{
int x,y;
};
void bfs(int sum)
{
queue<no> q;
for(int i=0;i<v[sum].size();++i)
{
q.push(no{v[sum][i].first,v[sum][i].second});
dis[sum][v[sum][i].first][v[sum][i].second]=0;
}
while(!q.empty())
{
no tmp=q.front();
q.pop();
for(int i=1;i<=4;++i)
{
int nx=tmp.x+dx[i];
int ny=tmp.y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&dis[sum][nx][ny]>dis[sum][tmp.x][tmp.y]+1)
{
q.push(no{nx,ny});
dis[sum][nx][ny]=dis[sum][tmp.x][tmp.y]+1;
}
}
for(int j=0;j<v[a[tmp.x][tmp.y]].size();++j)
{
int nx=v[a[tmp.x][tmp.y]][j].first;
int ny=v[a[tmp.x][tmp.y]][j].second;
if(dis[sum][nx][ny]>dis[sum][tmp.x][tmp.y]+1)
{
q.push(no{nx,ny});
dis[sum][nx][ny]=dis[sum][tmp.x][tmp.y]+1;
}
}
}
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
cin>>a[i][j];
v[a[i][j]].push_back(make_pair(i,j));
}
}
memset(dis,0x3f,sizeof(dis));
for(int i=1;i<=k;++i) bfs(i);
int t;
cin>>t;
while(t--)
{
int sx,sy,ex,ey;
cin>>sx>>sy>>ex>>ey;
int mn=abs(sx-ex)+abs(sy-ey);
for(int i=1;i<=k;++i)
{
mn=min(mn,dis[i][sx][sy]+dis[i][ex][ey]+1);
// cout<<dis[i][sx][sy]<<' '<<dis[i][ex][ey]+1<<'\n';
}
cout<<mn<<'\n';
}
return 0;
}
第 9 个点 T 了 。