#include<iostream>#include<vector>#include<string>#include<queue>#include<climits>using namespace std;vector<vector<int>> checknum = { {1,2},{1,-2},{2,1},{2,-1},{-1,2},{-1,-2},{-2,-1},{-2,1} };void bfs(vector<vector<int>>&amp; board, vector<vector<int>>&amp; numofhourse, vector<vector<int>>&amp; stepnum,int n,int m){ int maxstep = board[n][m]; int step = 0; queue<pair<int, int>> que; que.push({ n,m }); vector<vector<bool>> checkboard(board.size(), vector<bool>(board[0].size(), 0)); while (!que.empty() &amp;&amp; step < maxstep) { int size = que.size(); for (int i = 0; i < size; i++) { int x = que.front().first; int y = que.front().second; que.pop(); stepnum[x][y] += step; numofhourse[x][y]++; checkboard[x][y] = 1; for (int j = 0; j < checknum.size(); j++) { int nx = x + checknum[j][0]; int ny = y + checknum[j][1]; if (nx >= 0 &amp;&amp; nx < board.size() &amp;&amp; ny >= 0 &amp;&amp; ny < board[0].size() &amp;&amp; checkboard[nx][ny] == 0) { checkboard[nx][ny] = 1; que.push({ nx,ny }); } } } step++; }}int main() { int row, col; cin >> row >> col; vector<vector<int>> board(row, vector<int>(col, 0)); vector<vector<int>> numofhourse = board; vector<vector<int>> stepnum(row, vector<int>(col, 0)); int counthourse = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { string temp; cin >> temp; if (temp != &quot;.&quot;) { board[i][j] = stoi(temp); counthourse++; } } } for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (board[i][j] > 0) { bfs(board, numofhourse, stepnum, i, j); } } } int minstep = INT_MAX; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (numofhourse[i][j] == counthourse) { if (stepnum[i][j] < minstep) { minstep = stepnum[i][j]; } } } } if (minstep == INT_MAX) { cout << &quot;0&quot;; } else { cout << minstep; } return 0;}