Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

วางระเบิดศัตรูใน C++


สมมติว่าเรามีตาราง 2 มิติ ที่นี่แต่ละช่องเป็นกำแพง 'W' ศัตรู 'E' หรือ '0' ว่างเปล่า เราต้องหาศัตรูสูงสุดที่เราสามารถฆ่าได้โดยใช้ระเบิดลูกเดียว ระเบิดฆ่าศัตรูทั้งหมดในแถวและคอลัมน์เดียวกันจากจุดที่ปลูกจนกระทบผนัง และเราสามารถวางระเบิดได้เฉพาะในช่องว่างเท่านั้น

ดังนั้นหากอินพุตเป็นแบบ

วางระเบิดศัตรูใน C++

จากนั้นผลลัพธ์จะเป็น 3 เมื่อวางระเบิดที่กรีน มันจะฆ่าศัตรูสามคน

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ยกเลิก :=0

  • n :=จำนวนแถวของตาราง m :=จำนวนคอลัมน์ของกริด

  • กำหนดอาร์เรย์ colCnt ขนาด m

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • สำหรับการเริ่มต้น j :=0 เมื่อ j

      • ถ้า j เป็นศูนย์หรือ grid[i, j] เหมือนกับ 'W' ดังนั้น −

        • rowCnt :=0

        • ถ้า grid[i, j] เหมือนกับ 'W' แล้ว −

          • k :=j + 1

        • มิฉะนั้น

          • k :=เจ

        • สำหรับ k

          • rowCnt :=rowCnt + 1 เมื่อ (grid[i, k] คือ 'E') มิฉะนั้น 0

      • ถ้า i เป็นศูนย์ หรือ grid[i, j] เหมือนกับ 'W' ดังนั้น −

        • colCnt[j] :=0

        • ถ้า grid[i, j] เหมือนกับ 'W' แล้ว −

          • k :=ผม + 1

        • มิฉะนั้น

          • k :=ผม

        • สำหรับ k

          • colCnt[j] :=colCnt[j] + 1 เมื่อ (grid[k, j] คือ 'E') มิฉะนั้น 0

      • ถ้า grid[i, j] เหมือนกับ '0' แล้ว −

        • ret :=สูงสุดของ ret และ rowCnt + colCnt[j]

  • รีเทิร์น

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int maxKilledEnemies(vector<vector<char>>& grid) {
      int ret = 0;
      int n = grid.size();
      int m = n ? grid[0].size() : 0;
      int rowCnt = 0;
      vector<int< colCnt(m);
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (!j || grid[i][j] == 'W') {
               rowCnt = 0;
               int k;
               if (grid[i][j] == 'W')
                  k = j + 1;
               else
                  k = j;
               for (; k < m && grid[i][k] != 'W'; k++) {
                  rowCnt += (grid[i][k] == 'E');
               }
            }
            if (!i || grid[i][j] == 'W') {
               colCnt[j] = 0;
               int k;
               if (grid[i][j] == 'W')
                  k = i + 1;
               else
                  k = i;
               for (; k < n && grid[k][j] != 'W'; k++) {
                  colCnt[j] += (grid[k][j] == 'E');
               }
            }
            if (grid[i][j] == '0') {
               ret = max(ret, rowCnt + colCnt[j]);
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<char>> v = {{'0','E','0','0'},{'E','0','W','E'},{'0','E','0','0'}};
   cout << (ob.maxKilledEnemies(v));
}

อินพุต

{{'0','E','0','0'},{'E','0','W','E'},{'0','E','0','0'}}

ผลลัพธ์

3