fork download
  1. #include <iostream>
  2. #include <queue>
  3. using namespace std;
  4.  
  5. int map[100][100];
  6. pair<int, int> dir[4] = {make_pair(-1, 0), make_pair(1, 0), make_pair(0, -1), make_pair(0, 1)};
  7. int N, answer;
  8.  
  9. int main() {
  10. ios::sync_with_stdio(0);
  11. cin.tie(0);
  12. cout.tie(0);
  13.  
  14. int maxRain=0;
  15.  
  16. cin>>N;
  17. for(int i=0;i<N;i++){
  18. for(int j=0;j<N;j++){
  19. cin>>map[i][j];
  20. maxRain = max(map[i][j], maxRain);
  21. }
  22. }
  23.  
  24. for(int rain=0; rain<=maxRain; rain++){
  25. bool visited[100][100] = {false, };
  26. int area = 0;
  27. queue<pair<int, int>> q;
  28.  
  29. for(int i=0;i<N;i++){
  30. for(int j=0;j<N;j++){
  31.  
  32. if(map[i][j] - rain > 0 && !visited[i][j]){
  33.  
  34. area++;
  35. visited[i][j] = true;
  36. q.push(make_pair(i, j));
  37.  
  38. while(!q.empty()){
  39. pair<int, int> current = q.front();
  40.  
  41. q.pop();
  42.  
  43. for(int k=0;k<4;k++){
  44. int ny = current.first + dir[k].first;
  45. int nx = current.second + dir[k].second;
  46.  
  47. if(ny<0||ny>=N||nx<0||nx>=N) continue;
  48. if(visited[ny][nx]) continue;
  49. if(map[ny][nx] - rain > 0){
  50. visited[ny][nx] = true;
  51. q.push(make_pair(ny, nx));
  52. }
  53. }
  54. }
  55. }
  56. }
  57. }
  58.  
  59. answer = max(answer, area);
  60. }
  61. cout<<answer<<'\n';
  62.  
  63. return 0;
  64. }
Success #stdin #stdout 0s 5308KB
stdin
7
9 9 9 9 9 9 9
9 2 1 2 1 2 9
9 1 8 7 8 1 9
9 2 7 9 7 2 9
9 1 8 7 8 1 9
9 2 1 2 1 2 9
9 9 9 9 9 9 9
stdout
6