ரூக் லீட்கோட் தீர்வுக்கான கிடைக்கிறது


சிரமம் நிலை எளிதாக
அடிக்கடி கேட்கப்படுகிறது சதுக்கத்தில்
அணி

சிக்கல் அறிக்கை

இந்த சிக்கலில், a ஐ குறிக்கும் 2-D அணி வழங்கப்படுகிறது சதுரங்கப் பலகை உடன் ஒரு வெள்ளை ரூக் மற்றும் வேறு சில துண்டுகள். வைட்'ஸ் ரூக் கதாபாத்திரத்தால் குறிக்கப்படுகிறது 'ஆர்'. ஒயிட்டின் ஆயர்கள் பிரதிநிதித்துவப்படுத்துகிறார்கள் 'பி' மற்றும் கருப்பு நிற சிப்பாய்கள் குறிப்பிடப்படுகின்றன 'ப'. மேலே குறிப்பிட்டதைத் தவிர வேறு எந்தப் பகுதியும் இல்லை என்று சிக்கல் உத்தரவாதம் அளிக்கிறது. எங்கள் குறிக்கோள் என்னவென்றால், ஒரு நகர்வில் (பொது சதுரங்க விதிகளை கருத்தில் கொண்டு) வெள்ளைக் கயிறால் பிடிக்கக்கூடிய கருப்பு சிப்பாய்களின் எண்ணிக்கையைக் கண்டுபிடிப்பது.

உதாரணமாக

board = [[".",".",".",".",".",".",".","."],
         [".",".",".","p",".",".",".","."],
         [".",".",".","R",".",".",".","p"],
         [".",".",".",".",".",".",".","."],
         [".",".",".",".",".",".",".","."],
         [".",".",".","p",".",".",".","."],
         [".",".",".",".",".",".",".","."],
         [".",".",".",".",".",".",".","."]]
3
board = [[".",".",".",".",".",".",".","."],
         [".","p","p","p","p","p",".","."],
         [".","p","p","B","p","p",".","."],
         [".","p","B","R","B","p",".","."],
         [".","p","p","B","p","p",".","."],
         [".","p","p","p","p","p",".","."],
         [".",".",".",".",".",".",".","."],
         [".",".",".",".",".",".",".","."]]
0

விளக்கம்

ரூக் லீட்கோட் தீர்வுக்கான கிடைக்கிறது

அணுகுமுறை

சிக்கலுக்கான அணுகுமுறை முதலில் சதுரங்கப் பலகை 2-D இல் உள்ள நிலத்தின் நிலையைக் கண்டறிவது வரிசை பின்னர் நாம் ஒரு கருப்பு சிப்பாயை ('p') கண்டுபிடிக்க முடியுமா என்பதைக் கண்டுபிடிக்க மேல், இடது, வலது மற்றும் கீழ் திசைகளில் மீண்டும் சரிபார்க்கலாம். எந்தவொரு திசையிலும் ஒரே நிறத்தில் இருக்கும் ஒரு பிஷப்பை நாம் முடிவுக்கு வந்தால் அல்லது தாக்கினால், அந்த திசையில் சோதனை செய்வதை நிறுத்துகிறோம்.

அல்காரிதம்

  1. 'ஆர்' என்ற எழுத்தைக் கண்டுபிடிக்க முழு மேட்ரிக்ஸிலும் பயணித்து அதன் வரிசை மற்றும் நெடுவரிசை எண்ணை சேமிக்கவும் r, சி முறையே.
  2. துவக்க CNT கைப்பற்றக்கூடிய சிப்பாய்களின் எண்ணிக்கையை சேமிக்க
  3. மேல் திசையில் சரிபார்க்கவும், வரம்பு: i (0, r - 1):
      • if பலகை [i] [c] == 'ப':
        • அதிகரிப்பு CNT, cnt ++
        • இடைவெளி
      • if பலகை [i] [c] == 'பி':
        • இடைவெளி
  4. இடது, வலது மற்றும் கீழ் திசைகளுக்கும் இதைச் செய்யுங்கள்
  5. திரும்ப CNT

ரூக் லீட்கோட் தீர்வுக்கான கிடைக்கக்கூடிய பிடிப்புகளை செயல்படுத்துதல்

சி ++ திட்டம்

#include <bits/stdc++.h>

using namespace std;

int numRookCaptures(vector<vector<char>>& board)
{
    if(board.empty())
        return 0;
    int n = board.size() , m = board[0].size() , cnt = 0 , r , c;

    for(int i = 0 ; i < n ; i++)
        for(int j = 0 ; j < m ; j++)
        {
            if(board[i][j] == 'R')
            {
                r = i;
                c = j;
                break;
            }
        }


    for(int i = r - 1 ; i >= 0 ; i--)
    {
        if(board[i][c] == 'p')
        {
            cnt++;
            break;
        }
        if(board[i][c] == 'B')
            break;
    }
    for(int i = r + 1 ; i < n ; i++)
    {
        if(board[i][c] == 'p')
        {
            cnt++;
            break;
        }
        if(board[i][c] == 'B')
            break;
    }

    for(int j = c - 1 ; j >= 0 ; j--)
    {
        if(board[r][j] == 'p')
        {
            cnt++;
            break;
        }
        if(board[r][j] == 'B')
            break;
    }

    for(int j = c + 1 ; j < m ; j++)
    {
        if(board[r][j] == 'p')
        {
            cnt++;
            break;
        }
        if(board[r][j] == 'B')
            break;
    }
    return cnt;
}

int main() {
    vector <vector <char> > board = {{'.','.','.','.','.','.','.','.'},
                                    {'.','.','.','p','.','.','.','.'},
                                    {'.','.','.','R','.','.','.','p'},
                                    {'.','.','.','.','.','.','.','.'},
                                    {'.','.','.','.','.','.','.','.'},
                                    {'.','.','.','p','.','.','.','.'},
                                    {'.','.','.','.','.','.','.','.'},
                                    {'.','.','.','.','.','.','.','.'}};


    cout << numRookCaptures(board) << endl;
    return 0;
}

ஜாவா திட்டம்

class number_of_rook_captures {

    public static void main(String args[]) {
        char[][] board = {{'.','.','.','.','.','.','.','.'},
                         {'.','.','.','p','.','.','.','.'},
                         {'.','.','.','R','.','.','.','p'},
                         {'.','.','.','.','.','.','.','.'},
                         {'.','.','.','.','.','.','.','.'},
                         {'.','.','.','p','.','.','.','.'},
                         {'.','.','.','.','.','.','.','.'},
                         {'.','.','.','.','.','.','.','.'}};

        System.out.println(numRookCaptures(board));
    }

    public static int numRookCaptures(char [][] board) {
        if(board.length == 0)
            return 0;
        int n = board.length , m = board[0].length , cnt = 0 , r = -1 , c = -1;

        for(int i = 0 ; i < n ; i++)
            for(int j = 0 ; j < m ; j++)
            {
                if(board[i][j] == 'R')
                {
                    r = i;
                    c = j;
                    break;
                }
            }


        for(int i = r - 1 ; i >= 0 ; i--)
        {
            if(board[i][c] == 'p')
            {
                cnt++;
                break;
            }
            if(board[i][c] == 'B')
                break;
        }
        for(int i = r + 1 ; i < n ; i++)
        {
            if(board[i][c] == 'p')
            {
                cnt++;
                break;
            }
            if(board[i][c] == 'B')
                break;
        }

        for(int j = c - 1 ; j >= 0 ; j--)
        {
            if(board[r][j] == 'p')
            {
                cnt++;
                break;
            }
            if(board[r][j] == 'B')
                break;
        }

        for(int j = c + 1 ; j < m ; j++)
        {
            if(board[r][j] == 'p')
            {
                cnt++;
                break;
            }
            if(board[r][j] == 'B')
                break;
        }
        return cnt;
    }
}
3

ரூக் லீட்கோட் தீர்வுக்கான கிடைக்கக்கூடிய பிடிப்புகளின் சிக்கலான பகுப்பாய்வு

நேர சிக்கலானது

ஓ (1), நாம் ஒரு நிலையான எண்ணிக்கையை மீண்டும் செய்கிறோம்.

விண்வெளி சிக்கலானது

ஓ (1), உள்ளீட்டைப் பொருட்படுத்தாமல் நிலையான நினைவக இடத்தை மட்டுமே பயன்படுத்துகிறோம்.