Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để tìm ra số lượng ô tối đa có thể được chiếu sáng

Giả sử, chúng ta được cung cấp một lưới có kích thước h * w. Các ô trong lưới có thể chứa bóng đèn hoặc chướng ngại vật. Một ô bóng đèn chiếu sáng các ô ở bên phải, bên trái, lên và xuống của nó và ánh sáng có thể chiếu qua các ô trừ khi một ô có vật cản cản ánh sáng. Một ô chướng ngại vật không thể được chiếu sáng và nó chặn ánh sáng từ một ô bóng đèn đến các ô khác. Chúng tôi được cung cấp lưới trong một mảng các chuỗi, trong đó '#' đại diện cho một chướng ngại vật và '.' đại diện cho một ô trống. Chúng tôi chỉ có một bóng đèn và chúng tôi phải tìm ra số lượng ô tối đa mà chúng tôi có thể chiếu sáng để đặt bóng đèn vào lưới điện một cách tối ưu.

Vì vậy, nếu đầu vào là h =4, w =4, grid ={"# ...", "....", "... #", "...."}, thì đầu ra sẽ là 7.

Chương trình C ++ để tìm ra số lượng ô tối đa có thể được chiếu sáng

Từ hình ảnh, chúng ta có thể thấy các ô được chiếu sáng trong lưới.

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

 Xác định một mảng 2D trước khi khởi tạo i:=0, khi i  =0, cập nhật (giảm j đi 1), do:nếu lưới [i, j] giống với '#', thì:k:=0 Bỏ qua phần sau, bỏ qua bước lặp tiếp theo khác:k:=tối đa của k và đầu tiên [i, j] đầu tiên [i, j]:=k Xác định một mảng 2D thứ hai để khởi tạo j:=0, khi j  =0, cập nhật (giảm i đi 1), thực hiện:nếu lưới [i, j] giống với '#', thì:k:=0 Bỏ qua phần sau, bỏ qua lần lặp tiếp theo khác:k:=tối đa của k và thứ hai [i, j] thứ hai [i, j]:=kresult:=0 để khởi tạo i:=0, khi i  

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

 #include  using namespace std; int Giải (int h, int w, vector  grid) {vector > first (h, vector  (w) ); for (int i =0; i  =0; j--) {if (grid [i] [j] =='#') {k =0; tiếp tục; } else {k =max (k, first [i] [j]); đầu tiên [i] [j] =k; }}} vector > second (h, vector  (w)); for (int j =0; j  =0; i--) {if (grid [i] [j] =='#') {k =0; tiếp tục; } else {k =max (k, second [i] [j]); thứ [i] [j] =k; }}} int result =0; for (int i =0; i  grid ={"# ...", "....", "... #", "...."}; cout < 

Đầu vào

 4, 4, {"# ...", "....", "... #", "...."} 

Đầu ra

 7