Snake and Ladder Problem Java
- Get link
- X
- Other Apps
PROGRAM TO SOLVE SNAKE AND LADDER PROBLEM
import
java.util.LinkedList;
import
java.util.Queue;
public
class
SnakesLadder
{
// An entry in queue used in BFS
static
class
qentry
{
int
v;
// Vertex number
int
dist;
// Distance of this vertex from source
}
// This function returns minimum number of dice
// throws required to Reach last cell from 0'th cell
// in a snake and ladder game. move[] is an array of
// size N where N is no. of cells on board If there
// is no snake or ladder from cell i, then move[i]
// is -1 Otherwise move[i] contains cell to which
// snake or ladder at i takes to.
static
int
getMinDiceThrows(
int
move[],
int
n)
{
int
visited[] =
new
int
[n];
Queue<qentry> q =
new
LinkedList<>();
qentry qe =
new
qentry();
qe.v =
0
;
qe.dist =
0
;
// Mark the node 0 as visited and enqueue it.
visited[
0
] =
1
;
q.add(qe);
// Do a BFS starting from vertex at index 0
while
(!q.isEmpty())
{
qe = q.remove();
int
v = qe.v;
// If front vertex is the destination
// vertex, we are done
if
(v == n -
1
)
break
;
// Otherwise dequeue the front vertex and
// enqueue its adjacent vertices (or cell
// numbers reachable through a dice throw)
for
(
int
j = v +
1
; j <= (v +
6
) && j < n; ++j)
{
// If this cell is already visited, then ignore
if
(visited[j] ==
0
)
{
// Otherwise calculate its distance and
// mark it as visited
qentry a =
new
qentry();
a.dist = (qe.dist +
1
);
visited[j] =
1
;
// Check if there a snake or ladder at 'j'
// then tail of snake or top of ladder
// become the adjacent of 'i'
if
(move[j] != -
1
)
a.v = move[j];
else
a.v = j;
q.add(a);
}
}
}
// We reach here when 'qe' has last vertex
// return the distance of vertex in 'qe'
return
qe.dist;
}
public
static
void
main(String[] args)
{
// Let us construct the board given in above diagram
int
N =
30
;
int
moves[] =
new
int
[N];
for
(
int
i =
0
; i < N; i++)
moves[i] = -
1
;
// Ladders
moves[
2
] =
21
;
moves[
4
] =
7
;
moves[
10
] =
25
;
moves[
19
] =
28
;
// Snakes
moves[
26
] =
0
;
moves[
20
] =
8
;
moves[
16
] =
3
;
moves[
18
] =
6
;
System.out.println(
"Min Dice throws required is "
+
getMinDiceThrows(moves, N));
}
}
OUTPUT:
Min Dice throws required is 3
- Get link
- X
- Other Apps
Comments
Post a Comment