Untitled

 avatar
unknown
c_cpp
24 days ago
1.1 kB
4
Indexable
vector<vector<char>> applyGravity(const vector<vector<char>>& matrix) {
    int rows = matrix.size();
    int cols = matrix[0].size();
    vector<vector<char>> result = matrix;

    int maxDrop = rows; // Start with the maximum possible drop

    // Step 1: Determine how far the entire F block can fall
    for (int col = 0; col < cols; ++col) {
        int obstacleRow = rows; // Position of the nearest obstacle below
        
        for (int row = rows - 1; row >= 0; --row) {
            if (result[row][col] == '#') {
                obstacleRow = row; // Update nearest obstacle position
            } else if (result[row][col] == 'F') {
                maxDrop = min(maxDrop, obstacleRow - row - 1); // How far this F can fall
            }
        }
    }

    // Step 2: Move the F block down by maxDrop
    for (int row = rows - 1; row >= 0; --row) {
        for (int col = 0; col < cols; ++col) {
            if (result[row][col] == 'F') {
                result[row][col] = '_'; // Clear old position
                result[row + maxDrop][col] = 'F'; // Move down
            }
        }
    }

    return result;
}
Editor is loading...
Leave a Comment