#include #include #include #include #include #include #include using namespace std; const int MAXN = 35; const int dx[4] = {0, 1, 0, -1}; const int dy[4] = {1, 0, -1, 0}; int n, m, T; char grid[MAXN][MAXN]; bool isValid(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m; } vector> bfs01(int sx, int sy) { vector> dist(n, vector(m, 0x3f3f3f3f)); vector> visited(n, vector(m, false)); deque> dq; int startcost = (grid[sx][sy] == '1') ? 1 : 0; dist[sx][sy] = startcost; dq.push_back({sx, sy}); while (!dq.empty()) { auto [x, y] = dq.front(); dq.pop_front(); if (visited[x][y]) continue; visited[x][y] = true; for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (!isValid(nx, ny)) continue; int cost = (grid[nx][ny] == '1') ? 1 : 0; if (dist[x][y] + cost < dist[nx][ny]) { dist[nx][ny] = dist[x][y] + cost; if (cost == 0) { dq.push_front({nx, ny}); } else { dq.push_back({nx, ny}); } } } } return dist; } double euladis(int x1, int y1, int x2, int y2) { return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m >> T; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> grid[i][j]; } } double maxdis = 0.0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { auto dist = bfs01(i, j); for (int x = 0; x < n; x++) { for (int y = 0; y < m; y++) { if (dist[x][y] <= T) { maxdis = max(maxdis, euladis(i, j, x, y)); } } } } } printf("%.6f\n", maxdis); }