second commit
parent
3bdcd9c6c6
commit
68bfac356f
|
@ -211,3 +211,4 @@
|
||||||
## Backtracking
|
## Backtracking
|
||||||
|
|
||||||
- [N-Queens Problem](Backtracking/n-queens.cpp)
|
- [N-Queens Problem](Backtracking/n-queens.cpp)
|
||||||
|
- [Sudoku-Solver Problem](Backtracking/sudoku-Solver)
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
# Sudoku-Solver Problem
|
||||||
|
|
||||||
|
Given a partially filled 9×9 2D array ‘grid[9][9]’, the goal is to assign digits (from 1 to 9) to the empty cells so that every row, column, and subgrid of size 3×3 contains exactly one instance of the digits from 1 to 9.
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1) Create a function that checks if the given matrix is valid sudoku or not. Keep Hashmap for the row, column and boxes.
|
||||||
|
If any number has a frequency greater than 1 in the hashMap return false else return true;
|
||||||
|
2)Create a recursive function that takes a grid and the current row and column index.
|
||||||
|
3)Check some base cases. If the index is at the end of the matrix, i.e. i=N-1 and j=N then check if the grid is safe or not,
|
||||||
|
if safe print the grid and return true else return false. The other base case is when the value of column is N, i.e j = N, then move to next row, i.e. i++ and j = 0.
|
||||||
|
4)if the current index is not assigned then fill the element from 1 to 9 and recur for all 9 cases with the index of next element,
|
||||||
|
i.e. i, j+1. if the recursive call returns true then break the loop and return true.
|
||||||
|
5)if the current index is assigned then call the recursive function with index of next element, i.e. i, j+1
|
||||||
|
|
||||||
|
## Example
|
||||||
|
Input:
|
||||||
|
grid = { {3, 0, 6, 5, 0, 8, 4, 0, 0},
|
||||||
|
{5, 2, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{0, 8, 7, 0, 0, 0, 0, 3, 1},
|
||||||
|
{0, 0, 3, 0, 1, 0, 0, 8, 0},
|
||||||
|
{9, 0, 0, 8, 6, 3, 0, 0, 5},
|
||||||
|
{0, 5, 0, 0, 9, 0, 6, 0, 0},
|
||||||
|
{1, 3, 0, 0, 0, 0, 2, 5, 0},
|
||||||
|
{0, 0, 0, 0, 0, 0, 0, 7, 4},
|
||||||
|
{0, 0, 5, 2, 0, 6, 3, 0, 0} }
|
||||||
|
Output:
|
||||||
|
3 1 6 5 7 8 4 9 2
|
||||||
|
5 2 9 1 3 4 7 6 8
|
||||||
|
4 8 7 6 2 9 5 3 1
|
||||||
|
2 6 3 4 1 5 9 8 7
|
||||||
|
9 7 4 8 6 3 1 2 5
|
||||||
|
8 5 1 7 9 2 6 4 3
|
||||||
|
1 3 8 9 4 7 2 5 6
|
||||||
|
6 9 2 3 5 1 8 7 4
|
||||||
|
7 4 5 2 8 6 3 1 9
|
||||||
|
|
||||||
|
|
||||||
|
## Time Complexity
|
||||||
|
O(9^(n*n))
|
||||||
|
|
||||||
|
## Space Complexity
|
||||||
|
O(n*n)
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
|
||||||
|
- [C++](../../../algorithms/CPlusPlus/Backtracking/sudoku-Solver.cpp)
|
||||||
|
g++ .\sudoku-Solver.cpp
|
||||||
|
.\a.exe
|
||||||
|
|
||||||
|
## Video URL
|
||||||
|
|
||||||
|
[Youtube Video explaining N-queens problem](https://youtu.be/8lWxaRviJBA)
|
||||||
|
|
|
@ -23,6 +23,13 @@
|
||||||
- [Binary Search](./Searching/Binary-Search.MD)
|
- [Binary Search](./Searching/Binary-Search.MD)
|
||||||
- [Linear Search](./Searching/Linear-Search.md)
|
- [Linear Search](./Searching/Linear-Search.md)
|
||||||
|
|
||||||
|
## Backtracking
|
||||||
|
|
||||||
|
- [n-queens](./Backtracking/N-Queens.md)
|
||||||
|
- [sudoku-Solver](./Backtracking/sudokuSolver.cpp)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Others
|
## Others
|
||||||
|
|
||||||
[How to add new algorithm documentation?](./CONTRIBUTING.md)
|
[How to add new algorithm documentation?](./CONTRIBUTING.md)
|
||||||
|
|
Loading…
Reference in New Issue