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

Lonely Pixel I trong C ++

Giả sử chúng ta có một bức ảnh bao gồm các pixel đen và trắng, chúng ta phải tìm số pixel cô đơn màu đen. Ở đây, hình ảnh được thể hiện bằng một mảng ký tự 2D bao gồm 'B' và 'W', tương ứng cho các pixel đen và trắng.

Một pixel cô đơn màu đen thực chất là 'B' nằm ở một vị trí cụ thể nơi cùng một hàng và cùng một cột không có bất kỳ pixel màu đen nào khác.

Nếu đầu vào giống như -

W W B
W B W
B W W

Đầu ra sẽ là 3. Bởi vì cả ba chữ B đều là các pixel đơn màu đen.

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

  • n:=kích thước của hình ảnh

  • m:=(nếu n khác 0 thì kích thước cột, ngược lại là 0)

  • Xác định hai mảng hàng và cột có kích thước n

  • ret:=0, firstRow:=0

  • để khởi tạo i:=0, khi i

    • để khởi tạo j:=0, khi j

      • nếu ảnh [i, j] giống với 'B' thì -

        • nếu ảnh [0, j] <'Y' và ảnh [0, j] không bằng 'V', thì -

          • (tăng ảnh [0, j] lên 1)

        • nếu tôi giống 0, thì -

          • (tăng firstRow lên 1)

        • ngược lại khi ảnh [i, 0] <'Y' và ảnh [i, 0] không bằng 'V' thì -

          • (tăng ảnh [i, 0] lên 1)

  • để khởi tạo i:=0, khi i

    • để khởi tạo j:=0, khi j

      • nếu ảnh [i, j] <'W' và (ảnh [0, j] giống với 'C' hoặc ảnh [0, j] giống với 'X'), thì -

        • nếu tôi giống 0, thì -

          • ret:=(nếu ret + firstRow giống 1 thì 1, ngược lại là 0)

        • ngược lại khi ảnh [i, 0] giống với 'C' hoặc ảnh [i, 0] giống với 'X' thì -

          • (tăng ret lên 1)

  • trả lại ret

Ví dụ

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int findLonelyPixel(vector<vector<char>>& picture) {
      int n = picture.size();
      int m = n ? picture[0].size() : 0;
      vector<int< row(n);
      vector<int< col(m);
      int ret = 0;
      int firstRow = 0;
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (picture[i][j] == 'B') {
               if (picture[0][j] < 'Y' && picture[0][j] != 'V'){
                  picture[0][j]++;
               }
               if (i == 0)
                  firstRow++;
               else if (picture[i][0] < 'Y' && picture[i][0] != 'V') {
                  picture[i][0]++;
               }
            }
         }
      }
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (picture[i][j] < 'W' && (picture[0][j] == 'C' || picture[0][j] == 'X')) {
               if (i == 0)
                  ret += firstRow == 1 ? 1 : 0;
               else if (picture[i][0] == 'C' || picture[i][0] == 'X')
                  ret++;
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<char>> v = {{'W','W','B'},{'W','B','W'},{'B','W','W'}};
   cout << (ob.findLonelyPixel(v));
}

Đầu vào

{{'W','W','B'},{'W','B','W'},{'B','W','W'}}

Đầu ra

3