提交时间:2026-06-12 15:16:56

运行 ID: 91207

#include <bits/stdc++.h> using namespace std; int n, i, j; // 剥离外圈向内传递时,n减少2(因为行、列各减少2),i和j各减少1 // a[1][1]到a[2][2]的增量为 (n-1)*4 int dfs(int n, int i, int j) { if(i == 1) return j; // 如果剥离外层后,所求点处于当前矩阵的第一行,则行坐标就是值 if(j == n) return n + i - 1; // 如果剥离外层后,所求点处于当前矩阵的最后一列,则 i+n-1 就是值(从上往下走) if(i == n) return 3 * n - j - 1; // 如果剥离外层后,所求点处于当前矩阵的最后一行,则 2n-1+n-j = 3n-j-1 就是值 if(j == 1) return 4 * n - i - 2; // 如果剥离外层后,所求点处于当前矩阵的第一列,则 3n-2+n-i= 4n-i-2就是值 return dfs(n-2, i-1, j-1) + (n-1)*4; // 如果剥离外层后,所求点还没到外圈,则继续剥离本圈 } // 在已知 n 的前提下,最外圈的坐标可以直接求出 // 如果不在最外圈,就一层一层剥离,直到所求点处于最外圈 int main() { cin >> n >> i >> j; cout << dfs(n, i, j); return 0; }