Check if the given chessboard is valid or not

Given a NXN chessboard. The task is to check if the given chessboard is valid or not. A chess board is considered valid if every 2 adjacent cells are painted with different color. Two cells are considered adjacent if they share a boundary.

First chessboard is valid whereas second is invalid.

Examples:

Input : N = 2
C = { 
      { 1, 0 },
      { 0, 1 }
    }
Output : Yes

Input : N = 2
C = { 
      { 0, 0 },
      { 0, 0 }
    }
Output : No


Observe, on a chess board, every adjacent pair of cells is painted in different color.
So, for each cell (i, j), check whether the adjacent cells i.e
(i + 1, j), (i -1, j), (i, j + 1), (i, j – 1) is painted with different color than (i, j) or not.

Psedocode:

int X[] = {0, -1, 0, 1};
int Y[] = {1, 0, -1, 0};

bool validateConfiguration(int M[N][N]) 
{
  bool isValid = true;
  for (int i = 0; i < N; i++)
  {
    for (int j = 0; j < N; j++)
    {
      for (int k = 0; k < 4; k++)
      {
         int newX = i + X[k];
         int newY = j + Y[k];
         if (newX < N && newY < N && newX >= 0 &&
             newY >= 0 && M[newX][newY] == M[i][j])
         {
              isValid = false;
         } 
       }
     }
  }
  return isValid;
}

Below is the implemantation of this approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

#include <bits/stdc++.h>
using namespace std;
#define MAX 2
  
// Check if the given chess board is valid or not.
bool isValid(int c[][MAX], int n)
{
    int X[] = { 0, -1, 0, 1 };
    int Y[] = { 1, 0, -1, 0 };
    bool isValid = true;
  
    // Traversing each cell of the chess board.
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
  
            // for each adjacent cells
            for (int k = 0; k < 4; k++) {
                int newX = i + X[k];
                int newY = j + Y[k];
  
                // checking if they have different color
                if (newX < n && newY < n && newX >= 0 && 
                    newY >= 0 && c[newX][newY] == c[i][j]) {
                    isValid = false;
                }
            }
        }
    }
    return isValid;
}
  
// Driven Program
int main()
{
    int n = 2;
    int c[2][2] = { { 1, 0 },
                    { 0, 1 } };
  
    (isValid(c, n)) ? (cout << "Yes") : (cout << "No");
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Check if the given chess 
// board is valid or not
class GFG 
{
static int MAX = 2;
  
static boolean isValid(int c[][], int n)
{
    int X[] = { 0, -1, 0, 1 };
    int Y[] = { 1, 0, -1, 0 };
    boolean isValid = true;
  
    // Traversing each cell 
    // of the chess board.
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++)
        {
  
            // for each adjacent cells
            for (int k = 0; k < 4; k++) 
            {
                int newX = i + X[k];
                int newY = j + Y[k];
  
                // checking if they have
                // different color
                if (newX < n && newY < n && 
                    newX >= 0 && newY >= 0 &&
                    c[newX][newY] == c[i][j])
                {
                    isValid = false;
                }
            }
        }
    }
    return isValid;
}
  
// Driver Code
public static void main(String[] args) 
{
    int n = 2;
    int[][] c = {{ 1, 0 },
                 { 0, 1 }};
  
    if (isValid(c, n)) 
        System.out.println("Yes");
    else
        System.out.println("No");
}
  
// This code is contributed by ChitraNayal

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 Program to Check 
# if the given chessboard
# is valid or not
MAX = 2
  
# Check if the given chess
# board is valid or not.
def isValid(c, n) :
  
    X = [ 0, -1, 0, 1]
    Y = [ 1, 0, -1, 0]
    isValid = True
  
    # Traversing each cell 
    # of the chess board. 
    for i in range(n) :
        for j in range(n) :
              
            # for each adjacent cells
            for k in range(n) :
                newX = i + X[k]
                newY = j + Y[k]
  
                # checking if they have
                # different color 
                if (newX < n and newY < n and 
                    newX >= 0 and newY >= 0 and 
                    c[newX][newY] == c[i][j]) :
                    isValid = false
  
    return isValid
      
# Driver Code
if __name__ == "__main__" :
    n = 2
    c = [ [1, 0],
          [0, 1] ]
  
    if isValid(c, n) :
        print("Yes")
  
    else :
        print("No")
                      
# This code is contributed 
# by ANKITRAI1

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// Check if the given chess
// board is valid or not.
using System;
  
class GFG 
{
  
static bool isValid(int[,] c, int n)
{
    int[] X = { 0, -1, 0, 1 };
    int[] Y = { 1, 0, -1, 0 };
    bool isValid = true;
  
    // Traversing each cell 
    // of the chess board.
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++) 
        {
  
            // for each adjacent cells
            for (int k = 0; k < 4; k++) 
            {
                int newX = i + X[k];
                int newY = j + Y[k];
  
                // checking if they have different color
                if (newX < n && newY < n && 
                    newX >= 0 && newY >= 0 && 
                    c[newX, newY] == c[i, j]) 
                {
                    isValid = false;
                }
            }
        }
    }
    return isValid;
}
  
// Driver Code
public static void Main() 
{
    int n = 2;
    int[,] c = {{ 1, 0 },
                { 0, 1 }};
  
    if (isValid(c, n)) 
        Console.Write("Yes");
    else
        Console.Write("No");
}
  
// This code is contributed by ChitraNayal

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php 
// Check if the given chess
// board is valid or not.
function isValid(&$c, $n)
{
    $X = array( 0, -1, 0, 1 );
    $Y = array( 1, 0, -1, 0 );
    $isValid = true;
  
    // Traversing each cell 
    // of the chess board.
    for ($i = 0; $i < $n; $i++)
    {
        for ($j = 0; $j < $n; $j++)
        {
  
            // for each adjacent cells
            for ($k = 0; $k < 4; $k++) 
            {
                $newX = $i + $X[$k];
                $newY = $j + $Y[$k];
  
                // checking if they have different color
                if ($newX < $n && $newY < $n && 
                    $newX >= 0 && $newY >= 0 && 
                    $c[$newX][$newY] == $c[$i][$j]) 
                {
                    $isValid = false;
                }
            }
        }
    }
    return $isValid;
}
  
// Driver Code
$n = 2;
$c = array(array(1, 0),
           array(0, 1));
  
echo (isValid($c, $n)) ? "Yes" : "No";
  
// This code is contributed by ChitraNayal
?>

chevron_right



Output :

Yes


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.