fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n, m, a[10][10], visited[10][10], ret;
  4. vector<pair<int, int>> virusList, wallList;
  5. int dy[] = {-1, 0, 1, 0};
  6. int dx[] = {0, 1, 0, -1};
  7. void dfs(int y, int x){
  8. visited[y][x] = 1;
  9. for(int i = 0; i < 4; i++){
  10. int ny = y + dy[i];
  11. int nx = x + dx[i];
  12. if(ny < 0 || ny >= n || nx < 0 || nx >= m || visited[ny][nx] || a[ny][nx] == 1) continue;
  13. dfs(ny, nx);
  14. }
  15. }
  16.  
  17.  
  18. int solve(){
  19. fill(&visited[0][0], &visited[0][0] + 10 * 10, 0);
  20. for(int i = 0; i < n; i++){
  21. for(int j = 0; j < m; j++){
  22. if(a[i][j] == 2) dfs(i, j);
  23. }
  24. }
  25. int cnt = 0;
  26. for(int i = 0; i < n; i++){
  27. for(int j = 0; j < m; j++){
  28. if(a[i][j] == 0) cnt++;
  29. }
  30. }
  31. return cnt;
  32. }
  33.  
  34. int main(){
  35. cin >> n >> m;
  36. for(int i = 0; i < n; i++){
  37. for(int j = 0; j < m; j++){
  38. cin >> a[i][j];
  39. if(a[i][j] == 0) wallList.push_back({i, j});
  40. else if(a[i][j] == 2) virusList.push_back({i, j});
  41. }
  42. }
  43. for(int i = 0; i < wallList.size(); i++){
  44. for(int j = 0; j < i; j++){
  45. for(int k = 0; k < j; k++){
  46. a[wallList[i].first][wallList[i].second] = 1;
  47. a[wallList[j].first][wallList[j].second] = 1;
  48. a[wallList[k].first][wallList[k].second] = 1;
  49. ret = max(ret, solve());
  50. a[wallList[i].first][wallList[i].second] = 0;
  51. a[wallList[j].first][wallList[j].second] = 0;
  52. a[wallList[k].first][wallList[k].second] = 0;
  53. }
  54. }
  55. }
  56. cout << ret << '\n';
  57. }
Success #stdin #stdout 0.01s 5288KB
stdin
7 7
2 0 0 0 1 1 0
0 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 0 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0
stdout
32