# Minimum Cuts can be made in the Chessboard such that it is not divided into 2 parts

Given M x N Chessboard. The task is to determine the Maximum numbers of cuts that we can make in the Chessboard such that the Chessboard is not divided into 2 parts.

**Examples:**

Input:M = 2, N = 4Output:Maximum cuts = 3Input:M = 3, N = 3Output:Maximum cuts = 4

**Representation:**

- For M = 2, N = 2 We can only make 1 cut (mark in red). if we make 1 more cut then the chessboard will divide into 2 pieces.
- For M = 2, N = 4 We can makes 3 cuts (marks in red). if we make 1 more cut then the chessboard will divide into 2 pieces.

So, it can be observed that no. of cuts = **(m-1) * (n-1)**.

Below is the implementation of the above approach:

## C++

`// C++ implementation of above approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// function that calculates the ` `// maximum no. of cuts ` `int` `numberOfCuts(` `int` `M, ` `int` `N) ` `{ ` ` ` `int` `result = 0; ` ` ` ` ` `result = (M - 1) * (N - 1); ` ` ` ` ` `return` `result; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `M = 4, N = 4; ` ` ` ` ` `// Calling function. ` ` ` `int` `Cuts = numberOfCuts(M, N); ` ` ` ` ` `cout << ` `"Maximum cuts = "` `<< Cuts; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java implementation of above approach ` ` ` `class` `GFG { ` ` ` `// function that calculates the ` `// maximum no. of cuts ` `static` `int` `numberOfCuts(` `int` `M, ` `int` `N) ` `{ ` ` ` `int` `result = ` `0` `; ` ` ` ` ` `result = (M - ` `1` `) * (N - ` `1` `); ` ` ` ` ` `return` `result; ` `} ` ` ` `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` ` ` `int` `M = ` `4` `, N = ` `4` `; ` ` ` ` ` `// Calling function. ` ` ` `int` `Cuts = numberOfCuts(M, N); ` ` ` ` ` `System.out.println(` `"Maximum cuts = "` `+ Cuts); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 implementation of ` `# above approach ` ` ` `# function that calculates the ` `# maximum no. of cuts ` `def` `numberOfCuts(M, N): ` ` ` `result ` `=` `0` ` ` ` ` `result ` `=` `(M ` `-` `1` `) ` `*` `(N ` `-` `1` `) ` ` ` ` ` `return` `result ` ` ` `# Driver code ` `if` `__name__` `=` `=` `'__main__'` `: ` ` ` ` ` `M, N ` `=` `4` `, ` `4` ` ` ` ` `# Calling function. ` ` ` `Cuts ` `=` `numberOfCuts(M, N) ` ` ` ` ` `print` `(` `"Maximum cuts = "` `, Cuts) ` ` ` `# This code is contributed by ` `# Kriti_mangal ` |

*chevron_right*

*filter_none*

## C#

`//C# implementation of above approach ` `using` `System; ` ` ` `public` `class` `GFG{ ` `// function that calculates the ` `// maximum no. of cuts ` `static` `int` `numberOfCuts(` `int` `M, ` `int` `N) ` `{ ` ` ` `int` `result = 0; ` ` ` ` ` `result = (M - 1) * (N - 1); ` ` ` ` ` `return` `result; ` `} ` ` ` `// Driver Code ` ` ` ` ` `static` `public` `void` `Main (){ ` ` ` ` ` `int` `M = 4, N = 4; ` ` ` `// Calling function. ` ` ` `int` `Cuts = numberOfCuts(M, N); ` ` ` ` ` `Console.WriteLine(` `"Maximum cuts = "` `+ Cuts); ` ` ` `} ` `//This code is contributed by akt_mit ` `} ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// php implementation of above approach ` ` ` `// function that calculates the ` `// maximum no. of cuts ` `function` `numberOfCuts(` `$M` `, ` `$N` `) ` `{ ` ` ` `$result` `= 0; ` ` ` ` ` `$result` `= (` `$M` `- 1) * (` `$N` `- 1); ` ` ` ` ` `return` `$result` `; ` `} ` ` ` `// Driver Code ` `$M` `= 4; ` `$N` `= 4; ` ` ` `// Calling function. ` `$Cuts` `= numberOfCuts(` `$M` `, ` `$N` `); ` ` ` `echo` `"Maximum cuts = "` `, ` `$Cuts` `; ` ` ` `// This code is contributed by ANKITRAI1 ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

Maximum cuts = 9

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

## Recommended Posts:

- Minimum cuts required to divide the Circle into equal parts
- Possible cuts of a number such that maximum parts are divisible by 3
- Check if an array of 1s and 2s can be divided into 2 parts with equal sum
- Number of ways N can be divided into four parts to construct a rectangle
- Check if any square (with one colored cell) can be divided into two equal parts
- Minimum number of cuts required to pay salary from N length Gold Bar
- Minimum number of cuts required to make circle segments equal sized
- Minimum number of operations on a binary string such that it gives 10^A as remainder when divided by 10^B
- Break a number such that sum of maximum divisors of all parts is minimum
- Split the number into N parts such that difference between the smallest and the largest part is minimum
- Divide N into K unique parts such that gcd of those parts is maximum
- Split a number into 3 parts such that none of the parts is divisible by 3
- Find minimum number to be divided to make a number a perfect square
- Maximum number of pieces in N cuts
- Count pieces of circle after N cuts
- Check if the given chessboard is valid or not
- Count Distinct Rectangles in N*N Chessboard
- Count squares with odd side length in Chessboard
- Total position where king can reach on a chessboard in exactly M moves
- Total position where king can reach on a chessboard in exactly M moves | Set 2

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.