0% found this document useful (0 votes)
5 views9 pages

Tushar AP 7..

The document outlines two experiments from a Computer Science and Engineering lab. The first experiment focuses on implementing the Breadth-First Search (BFS) algorithm to find the shortest paths in an undirected graph with weighted edges, while the second experiment involves modeling a Snakes and Ladders game as a graph to determine the minimum number of dice rolls needed to reach the destination. Both experiments emphasize graph representation, BFS execution, and handling specific constraints in problem-solving.

Uploaded by

tusharsingh06.ts
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views9 pages

Tushar AP 7..

The document outlines two experiments from a Computer Science and Engineering lab. The first experiment focuses on implementing the Breadth-First Search (BFS) algorithm to find the shortest paths in an undirected graph with weighted edges, while the second experiment involves modeling a Snakes and Ladders game as a graph to determine the minimum number of dice rolls needed to reach the destination. Both experiments emphasize graph representation, BFS execution, and handling specific constraints in problem-solving.

Uploaded by

tusharsingh06.ts
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

DEPARTMENT OF

COMPUTER SCIENCE & ENGINEERING

Experiment: 7(a)

Student Name: Tushar Singh UID: 22BCS15923


Branch: BE-CSE Section: 622/B
Semester: 5th Date of Performance: 24/09/24
Subject Name: AP Lab-1 Subject Code: 22CSP-314

1. Title: BFS Short Reach.

2. Aim: Consider an undirected graph where each edge weighs 6 units. Each of the
nodes is labelled consecutively from 1 to n. You will be given a number of queries.
For each query, you will be given a list of edges describing an undirected graph.
After you create a representation of the graph, you must determine and report the
shortest distance to each of the other nodes from a given starting position using the
breadthfirst search algorithm (BFS). Return an array of distances from the start
node in node number order. If a node is unreachable, return -1 for that node.

3. Objective: The objective of this experiment is to implement an efficient method


for calculating the shortest paths in an undirected graph using BreadthFirst Search
(BFS). This involves representing the graph with an adjacency list, executing BFS
from a given start node, and returning the shortest distances to all other nodes, with
-1 indicating unreachable nodes.

4. Algorithm:
Step1: Graph Representation:

• Create an adjacency list to represent the undirected graph from the given
list of edges.

Step 2: Initialize BFS:

• Create a distance array of size n + 1 (where n is the number of nodes)


initialized to -1. Set distance[startNode] to 0 to indicate the start node.
• Create a queue and enqueue the startNode.

Step 3: BFS Traversal:


DEPARTMENT OF
COMPUTER SCIENCE & ENGINEERING
• While the queue is not empty:
o Dequeue the front node currentNode.
o For each neighbor neighbor of currentNode:
If distance[neighbor] is -1 (indicating it has not been visited):
Update distance[neighbor] to distance[currentNode] + 6 (distance from
the start node via the edge).
Enqueue neighbor.

Step 4: Return Distances:

• After BFS completes, return the distance array, which contains the shortest
distances from the start node to each node.

5. Code:
#include <bits/stdc++.h>
using namespace std;
string ltrim(const string &);
string rtrim(const string &);
vector<string> split(const string&);

vector<int> bfs(int n, int m, vector<vector<int>> edges, int s) {


// Create an adjacency list for the graph
vector<vector<int>> adj(n + 1); // Nodes are 1-indexed
for (const auto &edge : edges) {
int u = edge[0], v = edge[1];
adj[u].push_back(v);
adj[v].push_back(u); // As the graph is undirected
}
vector<int> distance(n + 1, -1);
queue<int> q;
distance[s] = 0;
q.push(s);

while (!q.empty()) {
int node = q.front();
q.pop();

for (int neighbor : adj[node]) {


if (distance[neighbor] == -1) { // If not visited
distance[neighbor] = distance[node] + 6; // Unweighted graph: edge
weight is 6
DEPARTMENT OF
COMPUTER SCIENCE & ENGINEERING
q.push(neighbor);
}
}
}
vector<int> result; for
(int i = 1; i <= n; i++) {
if (i != s) {
result.push_back(distance[i]);
}
}
return result;
}
int main()
{
ofstream fout(getenv("OUTPUT_PATH"));
string q_temp;
getline(cin, q_temp);
int q = stoi(ltrim(rtrim(q_temp)));
for (int q_itr = 0; q_itr < q; q_itr++) {
string first_multiple_input_temp;
getline(cin, first_multiple_input_temp);
vector<string> first_multiple_input = split(rtrim(first_multiple_input_temp));
int n = stoi(first_multiple_input[0]);
int m = stoi(first_multiple_input[1]);

vector<vector<int>> edges(m);
for (int i = 0; i < m; i++) {
edges[i].resize(2);

string edges_row_temp_temp;
getline(cin, edges_row_temp_temp);

vector<string> edges_row_temp = split(rtrim(edges_row_temp_temp));

for (int j = 0; j < 2; j++) {


int edges_row_item = stoi(edges_row_temp[j]);

edges[i][j] = edges_row_item;
}
}

string s_temp;
DEPARTMENT OF
COMPUTER SCIENCE & ENGINEERING
getline(cin, s_temp);
int s = stoi(ltrim(rtrim(s_temp)));
vector<int> result = bfs(n, m, edges, s);

for (size_t i = 0; i < result.size(); i++) {


fout << result[i];
if (i != result.size() - 1) {
fout << " ";
}
}
fout << "\n";
}
fout.close();
return 0;
}

string ltrim(const string &str) {


string s(str); s.erase(
s.begin(),
find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace)))
);
return s;
}

string rtrim(const string &str) {


string s(str); s.erase(
find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(),
s.end()
);
return s;
}

vector<string> split(const string &str) {


vector<string> tokens;

string::size_type start = 0;
string::size_type end = 0;

while ((end = str.find(" ", start)) != string::npos) {


tokens.push_back(str.substr(start, end - start));
start = end + 1;
}
DEPARTMENT OF
COMPUTER SCIENCE & ENGINEERING
tokens.push_back(str.substr(start));
return tokens;
}

6. Output:

7. Learning outcomes:
1. Graph Representation: Understand how to represent graphs using adjacency
lists for efficient traversal.
2. BFS Algorithm: Learn to implement Breadth-First Search to compute shortest
paths in unweighted graphs.
3. Queue Utilization: Use queues to explore nodes level by level in BFS.
4. Edge Case Handling: Handle unreachable nodes by marking them with a
default value (e.g., -1).

8. Time Complexity: O(n+m)


9. Space Complexity: O(n+m)
DEPARTMENT OF
COMPUTER SCIENCE & ENGINEERING
Experiment: 7(b)

1. Title: Quickest Way Up.

2. Aim: Markov takes out his Snakes and Ladders game, stares at the board and
wonders: "If I can always roll the die to whatever number I want, what would be the
least number of rolls to reach the destination?"
Rules: The game is played with a cubic die of 6 faces numbered 1 to 6.
1. Starting from square 1 , land on square 100 with the exact roll of the die. If
moving the number rolled would place the player beyond square 100 , no move
is made.
2. If a player lands at the base of a ladder, the player must climb the
ladder. Ladders go up only.
3. If a player lands at the mouth of a snake, the player must go down the
snake and come out through the tail. Snakes go down only.

3. Objective: The objective is to determine the minimum number of dice rolls needed
to reach square 100, accounting for ladders that advance the player and snakes that
send the player backward, while ensuring the player lands exactly on square 100.

4. Algorithm:

1. Graph Representation: Treat the board as a graph with 100 nodes (each
square representing a node). Each node is connected to the next 6 nodes
(dice rolls), with additional edges for ladders and snakes.
2. Initialize: Create an array moves[] where each index represents a square.
For ladders and snakes, update moves[i] to point to the destination square
(either the top of the ladder or the tail of the snake).
3. BFS Setup: Use Breadth-First Search (BFS) to explore the shortest path.
Initialize a queue and start from square 1. Maintain a distance array dist[]
to track the minimum number of dice rolls to reach each square.
4. BFS Execution:
1. For each square, check all possible dice rolls (1 to 6).
2. For each roll, move the player to the corresponding square and check
for ladders or snakes to adjust the position.
3. If the new square hasn't been visited, update its distance and enqueue
it.
5. Terminate: The BFS terminates when you reach square 100, and the result
is the minimum number of rolls stored in the distance array.
DEPARTMENT OF
COMPUTER SCIENCE & ENGINEERING
5. Code:

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

const int N=104; const int


INF=100000000; int
main()
{
int t; cin>>t;
for(int k=1;k<=t;++k)

{
vector<int> graph(N,0);
vector<bool> mark(N,false);
int n,m; cin>>n;
for(int i=0;i<n;++i)
{ int
a,b;
cin>>a>>b;
graph[a]=b;
}

cin>>m;
for(int i=0;i<m;++i)
{ int
a,b;
cin>>a>>b;
graph[a]=b;
}

queue< pair<int,int> > q;


int ans=INF;
q.push(make_pair(1,0));
mark[1]=true;
while(!q.empty())
{ pair<int,int>
p=q.front();
if(p.first==100)
DEPARTMENT OF
COMPUTER SCIENCE & ENGINEERING
{
ans=p.second;
break;
}
q.pop();
for(int i=1;i<=6;++i)
{ int
x=p.first+i;
if(x>100)
continue;

if(mark[x]==false)
{
mark[x]=true;
if(graph[x]==0)
q.push(make_pair(x,p.second+1));
else
{ x=graph[x];
mark[x]=true;
q.push(make_pair(x,p.second+1));

}
}
}
}

if(ans==INF)
cout<<-1<<endl; else
cout<<ans<<endl;
}
}
DEPARTMENT OF
COMPUTER SCIENCE & ENGINEERING
6. Output:

7. Learning outcomes:
Graph Representation: Learn to model a game board as a graph, where each node
represents a square and edges represent possible dice rolls and game mechanics like ladders
and snakes.

BFS Algorithm: Understand how Breadth-First Search (BFS) can be used to find the
shortest path in an unweighted graph, which is essential for solving problems involving
minimum steps or moves.

Handling Game Mechanics: Gain experience in incorporating specific game rules (e.g.,
ladders and snakes) into the graph traversal to adapt general algorithms to problem-specific
constraints.

8. Time Complexity: O(1)


9. Space Complexity: O(1)

You might also like