Gros Почему мне так хочется матерится? #include #include #include using namespace std; int N = 0, M = 0; int** maze = NULL; bool** visited = NULL; void input() { ifstream fin("input.txt"); if (!fin) { cerr << "Can't open input file!" << endl; exit(-1); } fin >> N >> M; maze = new int*[N]; visited = new bool*[N]; for (int i = 0; i < N; ++i) { maze[i] = new int[M]; visited[i] = new bool[M]; fill(visited[i], visited[i] + M, false); for (int j = 0; j < M; ++j) { fin >> maze[i][j]; } } fin.close(); } #define CAN_GO_WEST(row,col) ((col>0) && !(maze[row][col] & 1) && !visited[row][col-1]) #define CAN_GO_NORTH(row,col) ((row>0) && !(maze[row][col] & 2) && !visited[row-1][col]) #define CAN_GO_EAST(row,col) ((col#define CAN_GO_SOUTH(row,col) ((row int dfs(int row, int col) { int cnt = 1; visited[row][col] = true; if (CAN_GO_WEST(row, col)) { cnt += dfs(row, col - 1); } if (CAN_GO_NORTH(row, col)) { cnt += dfs(row - 1, col); } if (CAN_GO_EAST(row, col)) { cnt += dfs(row, col + 1); } if (CAN_GO_SOUTH(row, col)) { cnt += dfs(row + 1, col); } return (cnt); } int main() { input(); vector ans; for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { if (!visited[i][j]) ans.push_back(dfs(i, j)); } } cout < for (int i = 0; i < (int) ans.size(); ++i) { cout < } cout < return 0; }