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

Chương trình C++ tìm số lần đổi ít nhất từ chặn sang trống để đi được trong lưới

Mô tả bài toán

Lưới x×y, ô '#' chặn, '.' trống. Từ (0,0) đến (x-1,y-1) chỉ đi phải/xuống. Có thể đổi '#' thành '.' (chi phí 1). Tìm chi phí nhỏ nhất.

Ví dụ

x=4,y=4, grid={"..#.", "#.#.", "#.##", "###."}. Đầu ra: 1 (đổi (2,2)).

Thuật toán (DP trên lưới)

  1. mat[i][j] = chi phí nhỏ nhất đến (i,j).
  2. Khởi tạo mat[0][0] = (grid[0][0]=='#')?1:0.
  3. Duyệt : cập nhật và với chi phí +1 nếu ô đích là '#' và ô hiện tại là '.'.
  4. Kết quả .

Đoạn mã C++

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

int solve(int x,int y,vector<string> grid){
    vector<vector<int>> mat(x,vector<int>(y,100));
    mat[0][0] = (grid[0][0]=='#')?1:0;
    for(int i=0;i

Đầu vào / Đầu ra

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

Output: 1