Given a special Jigsaw puzzle consisting of N rows and M columns all identical pieces. Every piece has three tabs and one blank. The task is to check if the puzzle is solvable by placing the pieces in such a way that the tab of one piece fits perfectly into a blank of other piece.
Note: Rotate and Translate the pieces to solve the puzzle.
Examples:
Input: N = 2, M = 2
Output: YesInput: N = 1, M = 3
Output: Yes
Approach: The key observation in the problem is that:
- If the Puzzle has only one row or only one column. Then it is possible to solve the puzzle by placing a blank tab on that shared side itself.
- If the Puzzle has two rows and two columns. Then The puzzle is solvable by placing the blank Tabs in a circular chain.
- Otherwise, It is not possible to solve the Puzzle.
Below is the implementation of the above approach:
// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to check if the jigsaw
// Puzzle is solvable or not
void checkSolvable(int n, int m)
{
// Base Case
if (n == 1 or m == 1)
cout << "YES";
// By placing the blank tabs
// as a chain
else if (m == 2 and n == 2)
cout << "YES";
else
cout << "NO";
}
// Driver Code
int main()
{
int n = 1, m = 3;
checkSolvable(n, m);
}
// This code is contributed by jana_sayantan
// Java program for the above approach
import java.util.*;
class GFG{
// Function to check if the jigsaw
// Puzzle is solvable or not
static void checkSolvable(int n, int m)
{
// Base Case
if (n == 1 || m == 1)
System.out.print("YES");
// By placing the blank tabs
// as a chain
else if (m == 2 && n == 2)
System.out.print("YES");
else
System.out.print("NO");
}
// Driver Code
public static void main(String[] args)
{
int n = 1, m = 3;
checkSolvable(n, m);
}
}
// This code is contributed by sanjoy_62
# Python program for the above approach
# Function to check if the jigsaw
# Puzzle is solvable or not
def checkSolvable(n, m):
# Base Case
if n == 1 or m == 1:
print("YES")
# By placing the blank tabs
# as a chain
elif m == 2 and n == 2:
print("YES")
else:
print("NO")
# Driver Code
if __name__ == "__main__":
n = 1
m = 3
checkSolvable(n, m)
// C# program for the above approach
using System;
class GFG{
// Function to check if the jigsaw
// Puzzle is solvable or not
static void checkSolvable(int n, int m)
{
// Base Case
if (n == 1 || m == 1)
Console.WriteLine("YES");
// By placing the blank tabs
// as a chain
else if (m == 2 && n == 2)
Console.WriteLine("YES");
else
Console.WriteLine("NO");
}
// Driver Code
public static void Main()
{
int n = 1, m = 3;
checkSolvable(n, m);
}
}
// This code is contributed by susmitakundugoaldanga
<script>
// JavaScript implementation of the above approach
// Function to check if the jigsaw
// Puzzle is solvable or not
function checkSolvable(n, m)
{
// Base Case
if (n == 1 || m == 1)
document.write("YES");
// By placing the blank tabs
// as a chain
else if (m == 2 && n == 2)
document.write("YES");
else
document.write("NO");
}
// Driver code
let n = 1, m = 3;
checkSolvable(n, m);
// This code is contributed by code_hunt.
</script>
Output:
YES
Time Complexity: O(1)
Auxiliary Space: O(1)


