#include<bits/stdc++.h>
using namespace std;
int n;
int mapx[505][505];
long long res;
bool mapb[505][505];
int walk[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
queue<int> q;
void bfs(int x,int y){
q.push(x),q.push(y);
while(!q.empty()){
int x=q.front();
q.pop();
int y=q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=x+walk[i][0],ny=y+walk[i][1];
if(nx<1||nx>n||ny<1||ny>n||mapb[nx][ny]){
continue;
}
if(mapx[nx][ny]>mapx[ x ][y]+!mapb[ x ][y]){
q.push(nx);
q.push(ny);
mapx[nx][ny]=mapx[ x ][y]+!mapb[ x ][y];
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
mapx[i][j]=min(min(i-1,j-1),min(n-i,n-j));
}
}
for(int i=0;i<(n*n);i++){
int x;
cin>>x;
int y=x%n;
if(!y){
y=n;
}
res+=mapx[(x+(n-1))/n][y];
mapb[(x+(n-1))/n][y]=true;
bfs((x+(n-1))/n,y);
}
cout<<res;
return 0;
}
1 个赞