Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ tìm số ô sáng tối đa khi đặt một đèn pin

Mô tả bài toán

Cho lưới h×w có chướng ngại vật ('#') và ô trống ('.'). Một đèn pin đặt ở ô trống sẽ chiếu sáng 4 hướng (trên, dưới, trái, phải) cho đến khi gặp chướng ngại vật. Tìm vị trí đặt đèn để số ô được chiếu sáng (kể cả ô đặt đèn) lớn nhất.

Ví dụ

h=4,w=4, lưới = {"#...", "....", "...#", "...."}. Đầu ra: 7.

Thuật toán (Tiền xử lý 4 hướng)

  1. Mảng first[i][j]: số ô trống liên tiếp bên trái (kể ô hiện tại) trước khi gặp '#'.
  2. Quét trái→phải, sau đó phải→trái để first[i][j] = max ô trống liên tiếp theo hàng.
  3. Tương tự second[i][j] cho cột (trên→dưới, dưới→trên).
  4. Kết quả = maxi,j (first[i][j] + second[i][j]) + 1.

Đoạn mã C++

#include <bits/stdc++.h>
using namespace std;

int solve(int h, int w, vector<string> grid) {
    vector<vector<int>> first(h, vector<int>(w));
    for(int i=0;i=0;j--) {
            if(grid[i][j]=='#') { k=0; continue; }
            k=max(k, first[i][j]);
            first[i][j]=k;
        }
    }
    vector<vector<int>> second(h, vector<int>(w));
    for(int j=0;j=0;i--) {
            if(grid[i][j]=='#') { k=0; continue; }
            k=max(k, second[i][j]);
            second[i][j]=k;
        }
    }
    int res=0;
    for(int i=0;i

Đầu vào / Đầu ra

Input: 4, 4, {"#...", "....", "...#", "...."}

Output: 7