Hackerrank:Bomberman问题优化

时间:2019-07-24 04:03:34

标签: c++ time-complexity

我正在使用c ++解决problem on Hackerrank(炸弹人问题),并且得到了可行的解决方案。但是解决方案在某些测试案例中出现了超时错误。我找不到其他东西可以优化我的解决方案。

我希望在这里得到一些指导。

我的解决方法在下面

我创建了2个队列来放置炸弹和非炸弹位置

using namespace std;

vector<string> split_string(string);
std::queue<pair<int, int>> Bombspots;
std::queue<pair<int, int>> Next_Bombspots;

此功能只会查看非炸弹点队列并用炸弹填充

void FillPlaces(vector<string>& grid){
    while(!Next_Bombspots.empty()){
        grid[Next_Bombspots.front().first][Next_Bombspots.front().second] = 'O';
        Next_Bombspots.pop();
    }
}

此功能将填充炸弹队列

void FindBomb(vector<string>& grid){
    for (int i = 0; i < grid.size(); i++){
        for (int j = 0; j < grid[i].length(); j++){
            if (grid[i][j] == 'O'){
                Bombspots.push(make_pair(i,j));
            }
        }
    }
}

此功能将从炸弹现场队列中取出炸弹,将其爆炸并置于非炸弹现场队列中。

void BombNow(vector<string>& grid){
    while(!Bombspots.empty()){
        int r = Bombspots.front().first;
        int c = Bombspots.front().second;
        grid[r][c] = '.';
        Next_Bombspots.push(make_pair(r,c));

        if(r != grid.size() - 1){
           grid[r+1][c] = '.';
           Next_Bombspots.push(make_pair(r+1,c));
        }

        if(r != 0){
           grid[r-1][c] = '.';
           Next_Bombspots.push(make_pair(r-1,c));
        }

        if(c != grid[r].length() - 1){
           grid[r][c+1] = '.';
           Next_Bombspots.push(make_pair(r,c+1));
        }

        if(c != 0){
           grid[r][c-1] = '.';
           Next_Bombspots.push(make_pair(r,c-1));
        }

        Bombspots.pop();
    }
}

从main调用函数
1)以网格(二维矩阵)作为输入
2)输出最终网格

vector<string> bomberMan(int n, vector<string>& grid) {
    for(int i = 0; i < grid.size(); i++){
        for (int j = 0; j< grid[i].length(); j++){
            if (grid[i][j] == 'O'){
                Bombspots.push(make_pair(i,j));
            }else{
                Next_Bombspots.push(make_pair(i,j));
            }
        }
    }

    for (int i = 1; i < n; i++){
        if (i%2==0){
            BombNow(grid);
            FindBomb(grid);
        } else {
            FillPlaces(grid);
        }
    }

    return(grid);
}

0 个答案:

没有答案