Saturday, October 11, 2025
HomeData Modelling & AIPrint all unique combinations of setting N pieces on an NxN board

Print all unique combinations of setting N pieces on an NxN board

Given an integer N, the task is to print all the unique combinations of putting N pieces in an NxN board.

Note: Print (“*”) for pieces and (“-“) for an empty space.

Example:

Input: N = 2
Output:
* *
– –

* –
* –

* –
– *

– *
* –

– *
– *

– –
* *
Explanation: The total number of empty spaces are 2*2=4 and the pieces to be set is 2 so there are 4C2 combinations ((4!/(2!*2!))=6) possible which is represented above.

Input: N = 1
Output: *

 

Approach: This problem can be solved by using recursion to generate all possible solutions. Now, follow the steps below to solve this problem:

  1. Create a function named allCombinations, which will generate all possible solutions.
  2. It will take an integer piecesPlaced denoting the number of total pieces placed, integer N denoting the number of pieces needed to be placed, two integers row and col denoting the row and column where the current piece is going to be placed and a string ans for storing the matrix where pieces are placed, as arguments.
  3. Now, the initial call to allCombinations will pass 0 as piecesPlaced, N, 0 and 0 as row and col and an empty string as ans.
  4. In each call, check for the base case, that is:
    • If row becomes N and all pieces are placed, i.e. piecesPlaced=N. Then print the ans and return. Else if piecesPlaced is not N, then just return from this call.
  5. Now make two calls:
    • One to add a ‘*’ at the current position, and one to leave that position and add ‘-‘.
  6. After this, the recursive calls will print all the possible solutions.

Below is the implementation of the above approach.

C++




// C++ Program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to print all
// combinations of setting N
// pieces in N x N board
void allCombinations(int piecesPlaced, int N, int row,
                     int col, string ans)
{
   
    // If the total 2d array's space
    // is exhausted then backtrack.
    if (row == N) {
 
        // If all the pieces are
        // placed then print the answer.
        if (piecesPlaced == N) {
            cout << ans;
        }
        return;
    }
    int nr = 0;
    int nc = 0;
 
    // Declare one string
    // that will set the piece.
    string x = "";
 
    // Declare one string that
    // will leave the space blank.
    string y = "";
 
    // If the current column
    // is out of bounds then
    // increase the row
    // and set col to 0.
    if (col == N - 1) {
        nr = row + 1;
        nc = 0;
        x = ans + "*\n";
        y = ans + "-\n";
    }
 
    // Else increase the col
    else {
        nr = row;
        nc = col + 1;
        x = ans + "*\t";
        y = ans + "-\t";
    }
   
    // Set the piece in the
    // box and move ahead
    allCombinations(piecesPlaced + 1, N, nr, nc, x);
 
    // Leave the space blank
    // and move forward
    allCombinations(piecesPlaced, N, nr, nc, y);
}
 
// Driver Code
int main()
{
    int N = 2;
    allCombinations(0, N, 0, 0, "");
    return 0;
}
 
    // This code is contributed by rakeshsahni.


Java




// Java Program for the above approach
 
import java.io.*;
import java.util.*;
 
public class main {
 
    // Function to print all
    // combinations of setting N
    // pieces in N x N board
    public static void allCombinations(
        int piecesPlaced,
        int N, int row,
        int col, String ans)
    {
        // If the total 2d array's space
        // is exhausted then backtrack.
        if (row == N) {
 
            // If all the pieces are
            // placed then print the answer.
            if (piecesPlaced == N) {
                System.out.println(ans);
            }
            return;
        }
        int nr = 0;
        int nc = 0;
 
        // Declare one string
        // that will set the piece.
        String x = "";
 
        // Declare one string that
        // will leave the space blank.
        String y = "";
 
        // If the current column
        // is out of bounds then
        // increase the row
        // and set col to 0.
        if (col == N - 1) {
            nr = row + 1;
            nc = 0;
            x = ans + "*\n";
            y = ans + "-\n";
        }
 
        // Else increase the col
        else {
            nr = row;
            nc = col + 1;
            x = ans + "*\t";
            y = ans + "-\t";
        }
        // Set the piece in the
        // box and move ahead
        allCombinations(
            piecesPlaced + 1, N,
            nr, nc, x);
 
        // Leave the space blank
        // and move forward
        allCombinations(piecesPlaced, N,
                        nr, nc, y);
    }
 
    // Driver Code
    public static void main(String[] args)
        throws Exception
    {
        int N = 2;
 
        allCombinations(0, N, 0, 0, "");
    }
}


Python3




# Python Program for the above approach
 
# Function to print all
# combinations of setting N
# pieces in N x N board
def allCombinations(piecesPlaced, N, row, col, ans):
   
    # If the total 2d array's space
    # is exhausted then backtrack.
    if row == N:
       
        # If all the pieces are
        # placed then print the answer.
        if piecesPlaced == N:
            print(ans)
        return;
     
    nr = 0
    nc = 0
     
    # Declare one string
    # that will set the piece.
    x = ""
     
    # Declare one string that
    # will leave the space blank.
    y = ""
     
    # If the current column
    # is out of bounds then
    # increase the row
    # and set col to 0.
     
    if col == N - 1:
        nr = row + 1
        nc = 0
        x = ans + "*\n"
        y = ans + "-\n"
         
    # Else increase the col
    else:
        nr = row
        nc = col + 1
        x = ans + "*    "
        y = ans + "-    "
     
    # Set the piece in the
    # box and move ahead
    allCombinations(piecesPlaced + 1, N, nr, nc, x);
     
    # Leave the space blank
    # and move forward
    allCombinations(piecesPlaced, N, nr, nc, y);
 
# Driver Code
N = 2
allCombinations(0, N, 0, 0, "")
 
# This code is contributed by rdtank.


C#




// C# Program for the above approach
using System;
public class main {
 
    // Function to print all
    // combinations of setting N
    // pieces in N x N board
    public static void allCombinations(int piecesPlaced,
                                       int N, int row,
                                       int col, String ans)
    {
        // If the total 2d array's space
        // is exhausted then backtrack.
        if (row == N) {
 
            // If all the pieces are
            // placed then print the answer.
            if (piecesPlaced == N) {
                Console.WriteLine(ans);
            }
            return;
        }
        int nr = 0;
        int nc = 0;
 
        // Declare one string
        // that will set the piece.
        String x = "";
 
        // Declare one string that
        // will leave the space blank.
        String y = "";
 
        // If the current column
        // is out of bounds then
        // increase the row
        // and set col to 0.
        if (col == N - 1) {
            nr = row + 1;
            nc = 0;
            x = ans + "*\n";
            y = ans + "-\n";
        }
 
        // Else increase the col
        else {
            nr = row;
            nc = col + 1;
            x = ans + "*\t";
            y = ans + "-\t";
        }
       
        // Set the piece in the
        // box and move ahead
        allCombinations(piecesPlaced + 1, N, nr, nc, x);
 
        // Leave the space blank
        // and move forward
        allCombinations(piecesPlaced, N, nr, nc, y);
    }
 
    // Driver Code
    public static void Main(string[] args)
 
    {
        int N = 2;
 
        allCombinations(0, N, 0, 0, "");
    }
}
 
// This code is contributed by ukasp.


Javascript




// Javascript Program for the above approach
 
// Function to print all
// combinations of setting N
// pieces in N x N board
function allCombinations(piecesPlaced, N, row, col, ans) {
 
  // If the total 2d array's space
  // is exhausted then backtrack.
  if (row == N) {
 
    // If all the pieces are
    // placed then print the answer.
    if (piecesPlaced == N) {
      document.write(ans);
    }
    return;
  }
  let nr = 0;
  let nc = 0;
 
  // Declare one string
  // that will set the piece.
  let x = "";
 
  // Declare one string that
  // will leave the space blank.
  let y = "";
 
  // If the current column
  // is out of bounds then
  // increase the row
  // and set col to 0.
  if (col == N - 1) {
    nr = row + 1;
    nc = 0;
    x = ans + "*<br>";
    y = ans + "-<br>";
  }
 
  // Else increase the col
  else {
    nr = row;
    nc = col + 1;
    x = ans + "*     ";
    y = ans + "-     ";
  }
 
  // Set the piece in the
  // box and move ahead
  allCombinations(piecesPlaced + 1, N, nr, nc, x);
 
  // Leave the space blank
  // and move forward
  allCombinations(piecesPlaced, N, nr, nc, y);
}
 
// Driver Code
let N = 2;
allCombinations(0, N, 0, 0, "");
 
// This code is contributed by Saurabh Jaiswal


 
 

Output: 

*    *
-    -

*    -
*    -

*    -
-    *

-    *
*    -

-    *
-    *

-    -
*    *

 

 

Time Complexity: O(2^M), where M=N*N
Auxiliary Space: O(1)

 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Dominic
32352 POSTS0 COMMENTS
Milvus
87 POSTS0 COMMENTS
Nango Kala
6720 POSTS0 COMMENTS
Nicole Veronica
11884 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11941 POSTS0 COMMENTS
Shaida Kate Naidoo
6839 POSTS0 COMMENTS
Ted Musemwa
7103 POSTS0 COMMENTS
Thapelo Manthata
6794 POSTS0 COMMENTS
Umr Jansen
6794 POSTS0 COMMENTS