fork download
  1. //problem 2
  2.  
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5. int n, m, cnt = 0;
  6. char grid[1005][1005];
  7. int vis[1005][1005];
  8. vector<int> rooms;
  9.  
  10. vector<pair<int, int>> b = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
  11.  
  12. bool valid(int i, int j) {
  13. return !(i < 0 || i >= n || j < 0 || j >= m || grid[i][j] == '-');
  14. }
  15.  
  16. void dfs(int si, int sj) {
  17. vis[si][sj] = true;
  18. cnt++;
  19.  
  20. for (int i = 0; i < 4; i++) {
  21. int ci = si + b[i].first;
  22. int cj = sj + b[i].second;
  23.  
  24. if (valid(ci, cj) && !vis[ci][cj]) {
  25. dfs(ci, cj);
  26. }
  27. }
  28. }
  29.  
  30. int main() {
  31. cin >> n >> m;
  32.  
  33. for (int i = 0; i < n; i++) {
  34. for (int j = 0; j < m; j++) {
  35. cin >> grid[i][j];
  36. }
  37. }
  38.  
  39. memset(vis, false, sizeof(vis));
  40. bool flag = false;
  41. int mn = INT_MAX;
  42.  
  43. for (int i = 0; i < n; i++) {
  44. for (int j = 0; j < m; j++) {
  45. if (!vis[i][j] && grid[i][j] == '.') {
  46. cnt = 0;
  47. dfs(i, j);
  48. mn = min(cnt, mn);
  49. flag = true;
  50. }
  51. }
  52. }
  53.  
  54. flag ? cout << mn << endl : cout << "-1" << endl;;
  55.  
  56. return 0;
  57. }
  58.  
Success #stdin #stdout 0.01s 7768KB
stdin
Standard input is empty
stdout
-1