fork download
  1. #include <iostream>
  2.  
  3. int i, j, k, A[1002][1002], B[1002][1002], N, M;
  4.  
  5. int F(int x, int y) {
  6. if (x == 0 || y == 0 || x == N+1 || y == M+1 || B[x][y] == 1) return 0;
  7. B[x][y] = 1;
  8. --k;
  9. if (A[x-1][y] == 4) F(x-1, y);
  10. if (A[x+1][y] == 2) F(x+1, y);
  11. if (A[x][y-1] == 1) F(x, y-1);
  12. if (A[x][y+1] == 3) F(x, y+1);
  13. return 0;
  14. }
  15.  
  16. int main() {
  17. std::cin >> N >> M;
  18. k = N*M;
  19. for (i=1; i<=N; ++i)
  20. for (j=1; j<=M; ++j)
  21. std::cin >> A[i][j];
  22. if (A[1][1] == 2 || A[1][1] == 3) F(1, 1);
  23. if (A[1][M] == 1 || A[1][M] == 2) F(1, M);
  24. if (A[N][M] == 1 || A[N][M] == 4) F(N, M);
  25. if (A[N][1] == 3 || A[N][1] == 4) F(N, 1);
  26. for (i=2; i<M; ++i)
  27. if (A[1][i] == 2) F(1, i);
  28. for (i=2; i<M; ++i)
  29. if (A[N][i] == 4) F(N, i);
  30. for (i=2; i<N; ++i)
  31. if (A[i][1] == 3) F(i, 1);
  32. for (i=2; i<N; ++i)
  33. if (A[i][M] == 1) F(i, M);
  34. std::cout << k;
  35. return 0;
  36. }
Success #stdin #stdout 0.01s 5564KB
stdin
	2 2
1 2
3 4
stdout
Standard output is empty