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

Bomb Enemy ใน C++


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

เช่น ถ้าอินพุทเป็นแบบ

Bomb Enemy ใน C++

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

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

  • ret := 0

  • n := จำนวนแถวของ grid, m := จำนวนคอลัมน์ของ grid

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

  • ลูป i := 0 ถึง n-1 ทำ −

    • ลูป j := 0 ถึง m-1 ทำ −

      • ถ้า j เป็นศูนย์ หรือ grid[i][j] เป็น 'W' แล้ว −

        • rowCnt := 0

        • ถ้า grid[i][j] เป็น 'W' แล้ว −

          • k := j + 1

        • มิฉะนั้น

          • k := j

        • ลูป k < m และ grid[i][k] ไม่ใช่ 'W' เพิ่ม k ทำ −

          • rowCnt := rowCnt + 1 ถ้า (grid[i][k] เป็น 'E') มิฉะนั้น 0

      • ถ้า i เป็นศูนย์ หรือ grid[i][j] เป็น 'W' แล้ว −

        • colCnt[j] := 0

        • ถ้า grid[i][j] เป็น 'W' แล้ว −

          • k := i + 1

        • มิฉะนั้น

          • k := i

        • ลูป k < n และ grid[k][j] ไม่ใช่ 'W' เพิ่ม k ทำ −

          • colCnt[j] := colCnt[j] + 1 ถ้า (grid[k][j] เป็น 'E') มิฉะนั้น 0

      • ถ้า grid[i][j] เป็น '0' แล้ว −

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

  • คืนค่า ret

ตัวอย่าง

ลองดูการติดตั้งต่อไปนี้เพื่อให้เข้าใจได้ดีขึ้น −

#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