import java.util.*;
public class Main {
//右下左上
static int[] x= {0,1,0,-1};
static int[] y= {1,0,-1,0};
static boolean[][] vis=new boolean[30][30];
static int sum=1;
static int m=0;
static int n=0;
public static void dfs(int[][] arr,int i,int j) {
arr[i][j]=sum;
sum++;
if(i==19&&j==19) {
System.out.println(arr[19][19]);
return ;
}
//不能用for(int i=0;i<4;i++)让它在当前结点随便选择一个方向来走下一步,
//必须让它沿着上一步的方向走完一列一行。
//只有当沿着原本的方向不能走时,才换方向
while(true) {
int newx=i+x[m];
int newy=j+y[n];
if(newx>=0&&newx<30&&newy>=0&&newy<30&&vis[newx][newy]==false) {
vis[newx][newy]=true;
dfs(arr,newx,newy);
break;
}
//此时按原本的方向已经不能走了,将m和n继续向后遍历
else {
m=(m+1)%4;
n=(n+1)%4;
}
}
}
public static void main(String[] args) {
int[][] arr=new int[30][30];
vis[0][0]=true;
dfs(arr,0,0);
}
}