0% found this document useful (0 votes)
7 views

backtracking

Uploaded by

chandranaiik
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

backtracking

Uploaded by

chandranaiik
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

18MCA34C

DESIGN AND ANALYSIS OF ALGORITHM


UNIT V
Backtracking
Backtracking general method

Backtracking is a technique based on algorithm to solve problem. It uses recursive calling to


find the solution by building a solution step by step increasing values with time. It removes the
solutions that doesn't give rise to the solution of the problem based on the constraints given to
solve the problem.

Backtracking algorithm is applied to some specific types of problems,

 Decision problem used to find a feasible solution of the problem.


 Optimization problem used to find the best solution that can be applied.
 Enumeration problem used to find the set of all feasible solutions of the problem.

In backtracking problem, the algorithm tries to find a sequence path to the solution which has
some small checkpoints from where the problem can backtrack if no feasible solution is found
for the problem.

Example,

Here,

Green is the start point, blue is the intermediate point, red are points with no feasible solution,
dark green is end solution.
Here, when the algorithm propagates to an end to check if it is a solution or not, if it is then
returns the solution otherwise backtracks to the point one step behind it to find track to the next
point to find solution.

Algorithm

Step 1 − if current_position is goal, return success


Step 2 − else,
Step 3 − if current_position is an end point, return failed.
Step 4 − else, if current_position is not end point, explore and repeat above steps.

Let’s use this backtracking problem to find the solution to N-Queen Problem.

In N-Queen problem, we are given an NxN chessboard and we have to place n queens on the
board in such a way that no two queens attack each other. A queen will attack another queen if it
is placed in horizontal, vertical or diagonal points in its way. Here, we will do 4-Queen problem.

Here, the solution is −

Here, the binary output for n queen problem with 1’s as queens to the positions are placed.

{0 , 1 , 0 , 0}
{0 , 0 , 0 , 1}
{1 , 0 , 0 , 0}
{0 , 0 , 1 , 0}
For solving n queens problem, we will try placing queen into different positions of one row. And
checks if it clashes with other queens. If current positioning of queens if there are any two
queens attacking each other. If they are attacking, we will backtrack to previous location of the
queen and change its positions. And check clash of queen again.

Algorithm

Step 1 − Start from 1st position in the array.

Step 2 − Place queens in the board and check. Do,


Step 2.1 − After placing the queen, mark the position as a part of the solution and then
recursively check if this will lead to a solution.
Step 2.2 − Now, if placing the queen doesn’t lead to a solution and trackback and go to step (a)
and place queens to other rows.
Step 2.3 − If placing queen returns a lead to solution return TRUE.
Step 3 − If all queens are placed return TRUE.

Step 4 − If all rows are tried and no solution is found, return FALSE.

Now, Lets use backtracking to solve the Rat in a Maze problem −

In rat in a maze problem, we are with an NxN maze the first position of the maze i.e [0][0] and
will end at position [n-1][n-1] of the array. In this path there are some dead roads which do not
lead to a solution.

Using backtracking in this problem we will go down step by step to reach the final goal position
in the maze.

8 queens problem solution

This problem is to find an arrangement of N queens on a chess board, such that no queen can
attack any other queens on the board.

The chess queens can attack in any direction as horizontal, vertical, horizontal and diagonal way.
A binary matrix is used to display the positions of N Queens, where no queens can attack other
queens.

Input and Output

Input:
The size of a chess board. Generally, it is 8. as (8 x 8 is the size of a normal chess board.)
Output:
The matrix that represents in which row and column the N Queens can be placed.
If the solution does not exist, it will return false.

10000000
00000010
00001000
00000001
01000000
00010000
00000100
00100000

In this output, the value 1 indicates the correct place for the queens.
The 0 denotes the blank spaces on the chess board.

Algorithm

isValid(board, row, col)

Input: The chess board, row and the column of the board.

Output − True when placing a queen in row and place position is a valid or not.

Begin
if there is a queen at the left of current col, then
return false
if there is a queen at the left upper diagonal, then
return false
if there is a queen at the left lower diagonal, then
return false;
return true //otherwise it is valid place
End

solveNQueen(board, col)

Input − The chess board, the col where the queen is trying to be placed.

Output − The position matrix where queens are placed.

Begin
if all columns are filled, then
return true
for each row of the board, do
ifisValid(board, i, col), then
set queen at place (i, col) in the board
ifsolveNQueen(board, col+1) = true, then
return true
otherwise remove queen from place (i, col) from board.
done
return false
End

Example

#include<iostream>
usingnamespacestd;
#define N 8
voidprintBoard(int board[N][N]){
for(inti=0;i< N;i++){
for(int j =0; j < N; j++)
cout<< board[i][j]<<" ";
cout<<endl;
}
}

boolisValid(int board[N][N],int row,int col){


for(inti=0;i< col;i++) //check whether there is queen in the left or not
if(board[row][i])
returnfalse;
for(inti=row, j=col;i>=0&& j>=0;i--, j--)
if(board[i][j]) //check whether there is queen in the left upper diagonal or not
returnfalse;
for(inti=row, j=col; j>=0&&i<N;i++, j--)
if(board[i][j]) //check whether there is queen in the left lower diagonal or not
returnfalse;
returntrue;
}

boolsolveNQueen(int board[N][N],int col){


if(col >= N) //when N queens are placed successfully
returntrue;
for(inti=0;i< N;i++){ //for each row, check placing of queen is possible or not
if(isValid(board,i, col)){
board[i][col]=1; //if validate, place the queen at place (i, col)
if(solveNQueen(board, col +1)) //Go for the other columns recursively
returntrue;

board[i][col]=0; //When no place is vacant remove that queen


}
}
returnfalse; //when no possible order is found
}

boolcheckSolution(){
int board[N][N];
for(inti=0;i<N;i++)
for(int j =0; j<N; j++)
board[i][j]=0; //set all elements to 0

if(solveNQueen(board,0)==false){ //starting from 0th column


cout<<"Solution does not exist";
returnfalse;
}
printBoard(board);
returntrue;
}

int main(){
checkSolution();
}

Output

10000000
00000010
00001000
00000001
01000000
00010000
00000100
00100000
Sum of subsets

In this problem, there is a given set with some integer elements. And another some value is also
provided, we have to find a subset of the given set whose sum is the same as the given sum
value.

Here backtracking approach is used for trying to select a valid subset when an item is not valid,
we will backtrack to get the previous subset and add another element to get the solution.

Input and Output

Input:
This algorithm takes a set of numbers, and a sum value.
The Set: {10, 7, 5, 18, 12, 20, 15}
The sum Value: 35
Output:
All possible subsets of the given set, where sum of each element for every subsets is same as the
given sum value.
{10, 7, 18}
{10, 5, 20}
{5, 18, 12}
{20, 15}

Algorithm

subsetSum(set, subset, n, subSize, total, node, sum)

Input −The given set and subset, size of set and subset, a total of the subset, number of elements
in the subset and the given sum.

Output − All possible subsets whose sum is the same as the given sum.

Begin
if total = sum, then
display the subset
//go for finding next subset
subsetSum(set, subset, , subSize-1, total-set[node], node+1, sum)
return
else
for all element i in the set, do
subset[subSize] := set[i]
subSetSum(set, subset, n, subSize+1, total+set[i], i+1, sum)
done
End

The Graph Coloring

Graph coloring is the procedure of assignment of colors to each vertex of a graph G such that no
adjacent vertices get same color. The objective is to minimize the number of colors while
coloring a graph. The smallest number of colors required to color a graph G is called its
chromatic number of that graph. Graph coloring problem is a NP Complete problem.

Method to Color a Graph

The steps required to color a graph G with n number of vertices are as follows −

Step 1 − Arrange the vertices of the graph in some order.

Step 2 − Choose the first vertex and color it with the first color.

Step 3 − Choose the next vertex and color it with the lowest numbered color that has not been
colored on any vertices adjacent to it. If all the adjacent vertices are colored with this color,
assign a new color to it. Repeat this step until all the vertices are colored.

Example
In the above figure, at first vertex a is colored red. As the adjacent vertices of vertex a are again
adjacent, vertex b and vertex d are colored with different color, green and blue respectively.
Then vertex c is colored as red as no adjacent vertex of c is colored red. Hence, we could color
the graph by 3 colors. Hence, the chromatic number of the graph is 3.

Applications of Graph Coloring

Some applications of graph coloring include −

 Register Allocation
 Map Coloring
 Bipartite Graph Checking
 Mobile Radio Frequency Assignment
 Making time table, etc.

Hamiltonian graph

Hamiltonian graph - A connected graph G is called Hamiltonian graph if there is a cycle which
includes every vertex of G and the cycle is called Hamiltonian cycle. Hamiltonian walk in graph
G is a walk that passes through each vertex exactly once.

Dirac's Theorem - If G is a simple graph with n vertices, where n ≥ 3 If deg(v) ≥ {n}/{2} for
each vertex v, then the graph G is Hamiltonian graph.
Ore's Theorem - If G is a simple graph with n vertices, where n ≥ 2 if deg(x) + deg(y) ≥ n for
each pair of non-adjacent vertices x and y, then the graph G is Hamiltonian graph.

In above example, sum of degree of a and c vertices is 6 and is greater than total vertices, 5 using
Ore's theorem, it is an Hamiltonian Graph.

Non-Hamiltonian Graph

In above example, sum of degree of a and f vertices is 4 and is less than total vertices, 4 using
Ore's theorem, it is not an Hamiltonian Graph.
THANK YOU

This content is taken from the text books and reference books prescribed in
the syllabus.

You might also like