It1501 - Daa Lab Manual
It1501 - Daa Lab Manual
It1501 - Daa Lab Manual
OF
INFORMATION TECHNOLOGY
IT1501
NAME : _____________________________
BRANCH : _____________________________
YEAR : _____________________________
SEMESTER : _____________________________
i. Introduction of Course
i. Experiments
(Planning - Aim; Apparatus required; Theory; Procedure;
diagram;
Execution - calculation; formula, table; graph; report;
Monitoring - Viva Questions;
Assessment - Rubrics- Mark allotted and awarded; signature with
date
Observations - by student)
INDEX
CO
Ex. Page Mark
Date Title of the Exercise Attained? Sign
No. No. (100)
(Yes / No)
1. Nowadays algorithm plays a vital role in computer science, used to solve the problems.
2. Algorithm plays a vital role in solving the problems. So we have to design an algorithm very
effectively and efficiently.
3. The main parameters used for analysis the algorithms are time and space required for that
algorithm.
4. Brute Force is a trial and error method used by application programs. A straightforward
approach, usually based directly on the problem’s statement and definitions of the concepts
involved.
5. Divide and Conquer means, we are dividing the problem inputs into smaller distinct subsets.
These sub problems are the solved, finally combined together to produce the solution for the whole
problem.
6. Dynamic Programming method is used when the solution to a problem can be viewed as the
result of a sequence of decisions. This method generates many decision sequences.
7. Greedy Method is straight forward method to solve the problem. In which we need to find the
feasible solution. Any subsets that satisfy these constraints called as feasible solution.
8. Iterative Improvement is a design technique for solving optimization problems. It starts with a
feasible solution. Repeat the following step until no improvement can be found.
9. Backtracking is a general algorithm for finding all solutions to some computational problem,
that incrementally builds candidates to the solutions, and abandons each partial candidate c
("backtracks") as soon as it determines that c cannot possibly be completed to a valid solution.
10. Branch and Bound is a general algorithm for finding optimal solutions of various optimization
problems, especially in discrete and combinatorial optimization. Approximation Algorithm is a
way of dealing with NP-completeness for an optimization problem. This technique does not
guarantee the best solution.
Lab Course Syllabus - List of Experiments
Course Code
: IT1501
(As per Curriculum)
Course Code
: 20ITC302
(As per NBA)
Course Name : DESIGN AND ANALYSIS OF ALGORITHMS LAB
***********
Section: 2 Outcome Based Education (OBE)
To Make this Institution the unique of its kind in the field of Research and
Vision :
Development activities in this part of world
PEO -2 : Graduates will become pioneers in the field of IT by working collaboratively and
providing solutions to meet societal needs through persistent learning
*********************
OBE - Outcome Based Education - Introduction
Aim:
i. Outcomes are more like signboards and roadmaps to help the learners reach where
they’re supposed to reach, and contribute to progress.
ii. Outcome measurements provide the basis for continuous improvement in the
quality of learning
Terminology Description
i. With the introduction of the Washington accords, our higher
education demands better, intelligent workflows for the sake of
improving quality
ii. The accreditation and regulatory organisations including NBA,
Accreditation NAAC, AICTE etc. has clearly made their intentions clear about
introducing a skill-based, competency nurturing learning
experience
iii. As of the NBA, their accreditation methods and assessment
parameters are based on OBE
CO Assessment:
i. The assessments should be in alignment with the COs
ii. Question paper should be so set to assess all COs
iii. The average marks obtained in assessments against items for each
CO will indicate the CO attainment
CO Attainment Gaps:
CO
Attainment iv. Instructors can set targets for each CO of his/her course
v. Attainment gaps can therefore be identified
vi. Instructor can plan to reduce the attainment gaps or enhance
attainment targets enhance attainment targets
CO Attainment:
vii. If the assessment is in alignment with COs, the performance of the
students indicates the CO attainment
Program Outcome (PO)
(Graduate Attributes)
At end of the laboratory course,
PO / Engineering Graduate will be able Learning attained the Outcomes / Skill of
PSO to: Level the Student -
(Remark by Students)
Engineering knowledge: Apply the
knowledge of mathematics, science,
engineering fundamentals and an K3
PO 1
engineering specialization for the - Apply
solution of complex engineering
problems.
Problem analysis: Identify,
formulate, research literature and
analyze complex engineering
K4
PO 2 problems reaching substantiated
- Analyze
conclusions using first principles of
mathematics, natural sciences and
engineering sciences.
Design/development of solutions:
Design solutions for complex
engineering problems and design
system components or processes that
K5
PO 3 meet the specified needs with
-Evaluate
appropriate consideration for public
health and safety, and cultural,
societal, and environmental
considerations.
Conduct investigations of complex
problems: Use research-based
knowledge and research methods
K5
PO 4 including design of experiments,
- Evaluate
analysis and interpretation of data,
and synthesis of the information to
provide valid conclusions.
Program Outcome (PO)
(Graduate Attributes)
At end of the laboratory course,
PO / Engineering Graduate will be able Learning attained the Outcomes / Skill of
PSO to: Level the Student -
(Remark by Students)
Modern tool usage: Create, select
and apply appropriate techniques,
resources and modern engineering
K6
PO 5 and IT tools, including prediction
- Create
and modeling to complex
engineering activities, with an
understanding of the limitations.
The engineer and society: Apply
reasoning informed by the contextual
knowledge to assess societal, health,
K3
PO 6 safety, legal and cultural issues and
- Apply
the consequent responsibilities
relevant to the professional
engineering practice.
Environment and sustainability:
Understand the impact of the
professional engineering solutions in
K2
PO 7 societal and environmental contexts,
Understand
and demonstrate the knowledge of,
and need for sustainable
development.
Ethics: Apply ethical principles and
commit to professional ethics and K3
PO 8
responsibilities and norms of the - Apply
engineering practice.
Individual and team work:
A3
PO 9 Function effectively as an individual,
-Value
and as a member or leader in diverse
Program Outcome (PO)
(Graduate Attributes)
At end of the laboratory course,
PO / Engineering Graduate will be able Learning attained the Outcomes / Skill of
PSO to: Level the Student -
(Remark by Students)
teams, and in multidisciplinary
settings.
Communication: Communicate
effectively on complex engineering
activities with the engineering
community and with the society at
A3
PO 10 large, such as, being able to
- Value
comprehend and write effective
reports and design documentation,
make effective presentations, and
give and receive clear instructions.
Project management and finance:
Demonstrate knowledge and
understanding of the engineering and
management principles and apply K3
PO 11
these to one’s own work, as a - Apply
member and leader in a team, to
manage projects and in
multidisciplinary environments.
Life-long learning: Recognize the
need for, and have the preparation A5
PO 12 and ability to engage in independent
Characterize
and life-long learning in the broadest
context of technological change.
Program Specific Outcome
(PSOs)
At the end of the program, the
student
Course Objectives
• Practice basic commands of operating systems, execute system calls of UNIX operating
system and practice basic shell programming
• Implement process synchronization mechanisms in operating systems
• Learn various process management schemes in operating systems
• Practice with different memory management mechanisms
• Implement the file allocation techniques
Course Outcomes
On successful completion of this course, students will be able to
20ITC302.1 Identify the time and space complexity of computational problems K3 - Apply
Make use of brute force and divide and conquer techniques for
20ITC302.2 K3 - Apply
sorting and searching problems
Apply greedy and dynamic programming techniques for graph and
20ITC302.3 K3 - Apply
combinatorial problems
Identify the roles of iterative improvement technique to solve
20ITC302.4 K2 - Understand
optimization problems
Explain the use of backtracking, branch & bound and
20ITC302.5 approximation techniques to overcome the limitations of np- K2 - Understand
complete and np-hard problems
20ITC302.1 H M - M - - - - L - - M M -
20ITC302.2 H M M M - - - - L - - M H -
20ITC302.3 H M M M - - - - L - - M H -
20ITC302.4 H M M M - - - - L - - M H -
20ITC302.5 H M M M - - - - L - - M H L
CO - PO Mapping
Program
Program Outcomes Specific
Outcomes
PO1 PO2 PO3 PO4 PO5 PO6 PO7 PO8 PO9 PO10 PO11 PO12 PSO1 PSO2
CO
(K3) (K4) (K5) (K5) (K6) (K3) (K2) (K3) (A3) (A3) (K3) (K5) (K3) (K5)
20ITC302.1 3 2 - 2 - - - - 1 - - 2 3 -
20ITC302.2 3 2 2 2 - - - - 1 - - 2 3 -
20ITC302.3 3 2 2 2 - - - - 1 - - 2 3 -
20ITC302.4 3 2 2 2 - - - - 1 - - 2 3 -
20ITC302.5 3 2 2 2 - - - - 1 - - 2 3 1
Average 3 2 2 2 - - - - 1 - - 2 3 1
Marks Average CO
Course
EXPERIMENT NAME Obtained of Each Attained?
Outcome (Y/N)
Out of 100 CO
Implementation of Knapsack Problem using
20ITC217.1
Brute Force Technique
Implement Merge and Quick Sort Algorithms
20ITC217.2 and Compare the Time Complexity for
Various of N Values
Implementation of Warshall‘s and Floyd‘s
20ITC217.3 Algorithm using Dynamic Programming
Technique
Implementation of Huffman Tree using
20ITC217.4
Greedy Technique
Implementation of Stable Marriage Problem
20ITC217.4
using Iterative Improvement Technique
Implementation of N-Queens Problem using
20ITC217.5
Backtracking Technique
The Institute works with several hazardous materials and equipment. Safety is an important
part of any training in research. Potential job givers, be it industry or academia, expect a certain
awareness about safety.
1. Safety OLSEH suggested that the four essential principles of safety must be
Principles follow for academics labs of institutions:
To prevent confusion, this manual clearly defines standards for safe work
practices. These rules need to be followed by everyone.
Follow Rules
“Remember practicing safety means doing things the right way, not
the quick way”
No matter how careful they are, people often make mistakes. An effective
Trust safety policy does not rely on people but relies on systems to reduce the
structures probability of accidents.
more than
people “I will be careful with chemicals” is a not an “idiot-proof” safety
precaution, chemical-resistant gloves are.
Respond to emergency. Become familiar with the work area, available exits, and
Emergencies safety equipment.
“training could save a life during an emergency”
Here are links for some important Safety related documents shared by
Safety
Related IISc: Safety Manual: https://olseh.iisc.ac.in/wp-
Documents content/uploads/2019/03/IIScSafetyManual_Ver1_01.pdf
Section: 4 Laboratory Experiments Skill Development
AIM
ALGORITHM
Step - 2: Given N items of known weight w1, w2, … wn and profit p1, p2, … pn and a
knapsack of capacity W.
Step - 3: A simple solution is to consider all subsets of items and calculate the total
weight and value of all subsets.
Step - 4: Consider the only subsets whose total weight is smaller than W in order to
identify the feasible subsets.
Step - 5: From all feasible subsets, find the maximum value subset.
#include<stdio.h>
struct good
{
int weight;
int value;
}
goods[50];
int n,bestValue,cv,cw,c,N,i=0;
int x[50],cx[50];
int knapstack(int i)
{
int k=0;
if(i>n-1)
{
if(bestValue<cv&&cw<=c)
{
for(k=0;k<n;k++)
{
x[k]=cx[k];
bestValue=cv;
}
}
return bestValue;
}
cw=cw+goods[i].weight;
cv=cv+goods[i].value;
cx[i]=1;
knapstack(i+1);
cw=cw-goods[i].weight;
cv=cv-goods[i].value;
cx[i]=0;
knapstack(i+1);
return bestValue;
}
int main()
{
int y;
printf("Please Enter the no.of items:");
scanf("%d",&n);
printf("Please enter the capacity of the packback:");
scanf("%d",&c);
printf("Please Enter the weight of the items in turn:");
for(i=0;i<n;i++)
{
scanf("%d",&goods[i].weight);
}
printf("Please Enter the values of the item in turn:");
for(i=0;i<n;i++)
{
scanf("%d",&goods[i].value);
}
y=knapstack(0);
printf("The Maximum value is %d",y);
printf("\n Optimal loading plan:");
for(i=0;i<n;i++)
{
printf("%d ",x[i]);
}
return 0;
}
SAMPLE OUTPUT
3. You are given a knapsack that can carry a maximum weight of 60. There are 4 items with
weights {20, 30, 40, 70} and values {70, 80, 90, 200}. What is the maximum value of the items
you can carry using the knapsack?
RESULT
Thus the implementation of knapsack problem using brute force technique was verified
and executed successfully.
1.
MAX.
MARKS
CATEGORY MARKS
AWARDED
ALLOTED
LOGIC 30
CODE DESIGN 30
VIVA-VOCE 20
RECORD
20
SUBMISSION
TOTAL 100
Ex. No: 2 Implement Merge Sort and Quick Sort Algorithms and
AIM
To implement merge sort algorithm and compare the time complexity for several of N
values.
ALGORITHM
Step - 3: It divides the input array into two halves, calls itself for the two halves, and
then merges the two sorted halves.
Step - 4: Find the middle index of the array and divide the array from the middle.
Step - 6: Call merge sort for the second half of the array.
Step - 7: The merge() is a key process that sorts the A[l..m] and A[m+1..r] into two
sorted sub-arrays to merge the two sorted halves into a single sorted array.
#include<stdio.h>
#include<stdlib.h>
int mid;
if(low<high)
mid=(low+high)/2;
mergesort(a,low,mid);
mergesort(a,mid+1,high);
merge(a,low,mid,high);
int i, j, k;
i = 0;
j = 0;
k = low;
a[k] = temp1[i];
i++;
else
a[k] = temp2[j];
j++;
k++;
a[k] = temp1[i];
i++;
k++;
a[k] = temp2[j];
j++;
k++;
}
}
int main()
int a[50],n,i=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
printf("%d ",a[i]);
mergesort(a,0,n-1);
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
SAMPLE OUTPUT
RESULT
Thus the implementation of merge sort algorithm and comparison of the time
complexity for several of N values were executed successfully.
AIM
To implement quick sort algorithm and compare the time complexity for several of N
values.
ALGORITHM
Step - 3: It picks an element as pivot and partitions the given array around the picked
pivot.
Step - 4: There are many different versions of Quicksort that pick pivot in different
ways.
Always pick first element as pivot. (Implemented below)
Step - 5: Given an array and an element x of array as pivot, put x at its correct position
in sorted array and put all smaller elements (smaller than x) before x, and put all greater
elements (greater than x) after x.
Step - 6: The left to right scan i starts with second element and skips over the elemetnt
smaller than pivot and stops if the element is greater than or equal to pivot.
Step - 7: The right to left scan j starts with last element and skips over the element larger
than pivot and stops if the element is smaller than or equal to pivot.
Step - 8: If scanning indices not crossed simply exchange A[i] and A[j] and resume the
scan by incrementing I and decrementing j.
Step - 9: If scanning indices crossed over and i > j then exchange pivot and A[j].
#include<stdio.h>
#include<stdlib.h>
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
int partition(int array[], int low, int high)
{
int pivot = array[high];
int i = (low - 1);
int j;
for (j = low; j < high; j++)
{
if (array[j] <= pivot)
{
i++;
swap(&array[i], &array[j]);
}
}
swap(&array[i + 1], &array[high]);
return (i + 1);
}
void quickSort(int array[], int low, int high)
{
if (low < high)
{
int pi = partition(array, low, high);
quickSort(array, low, pi - 1);
quickSort(array, pi + 1, high);
}
}
void printArray(int array[], int size)
{
int i;
for (i = 0; i < size; ++i)
{
printf("%d ", array[i]);
}
printf("\n");
}
int main()
{
int data[50],n,i;
printf("Enter the size of the array : ");
scanf("%d",&n);
printf("Enter the array elements : ");
for (i=0;i<n;i++)
{
scanf("%d",&data[i]);
}
printf("Unsorted Array\n");
printArray(data, n);
quickSort(data, 0, n - 1);
printf("Sorted array in ascending order: \n");
printArray(data, n);
}
SAMPLE OUTPUT
2. How many sub arrays does the quick sort algorithm divide the entire array into?
RESULT
Thus the implementation of quick sort algorithm and comparison of the time complexity
for several of N values were executed successfully.
1.
CODE DESIGN 30
VIVA-VOCE 20
RECORD
20
SUBMISSION
TOTAL 100
Ex. No: 3 Implementation of Warshall’s and Floyd’s Algorithm using
AIM
ALGORITHM
Step-2: Specifically, the element in the ith row and jth column of matrix
is equal to 1 if and only if there exist a directed path of a positive length from the ith
vertex to the jth vertex with each intermediate vertex k.
Step-3: It is a weighted connected graph to calculate the length pf shortest path from
each vertex to all other vertices.
Step-4: D ←W
for k←1 to n do
for i ←1 to n do
for j ←1 to n do
D[i, j ]←min{D[i, j ], D[i, k]+ D[k, j]}
return D
Step-5: The element in row i and column j of the current distance matrix D (k−1) is
replaced by the sum of the elements in the same row i and the column k and in the same
column j and the row k if and only if the latter sum is smaller than its current value.
#include<stdio.h>
#define nV 4
#define INF 999
void printFloyd(int matrix[][nV])
{
for(int i=0;i<nV;i++)
{
for(int j=0;j<nV;j++)
{
printf("%d\t",matrix[i][j]);
}
printf("\n");
}
}
void FloydWarshall(int graph[] [nV])
{
int matrix[nV][nV];
for(int i=0;i<nV;i++)
{
for(int j=0;j<nV;j++)
{
matrix[i][j]=graph[i][j];
}
}
for(int k=0;k<nV;k++)
{
for(int i=0;i<nV;i++)
{
for(int j=0;j<nV;j++)
{
if (matrix[i][j]> matrix[i][k] + matrix[k][j])
{
matrix[i][j] = matrix[i][k] + matrix[k][j];
}
}
}
printFloyd(matrix);
printf("\n");
}
}
int main()
{
int graph[nV] [nV] = {{0,INF,3,INF},{2,0,INF,INF},{INF,7,0,1},{6,INF,INF,0}};
FloydWarshall(graph);
return 0;
}
SAMPLE OUTPUT
0 999 3 999
2 0 5 999
999 7 0 1
6 999 9 0
0 999 3 999
2 0 5 999
9 7 0 1
6 999 9 0
0 10 3 4
2 0 5 6
9 7 0 1
6 16 9 0
0 10 3 4
2 0 5 6
7 7 0 1
6 16 9 0
VIVA QUESTIONS
RESULT
1.
LOGIC 30
CODE DESIGN 30
VIVA-VOCE 20
RECORD
20
SUBMISSION
TOTAL 100
Ex. No: 4 Implementation of Djikstra’s Algorithm using Greedy
Technique
Date:
AIM
ALGORITHM
Step-2: A tentative distance value is assigned to every node; this value is set to zero for
the initial node, and to infinity for all other nodes.
Step-3: All nodes unvisited are marked, and the initial node is set as current node.
Step-4: For the current/initial node, take into account all the unvisited nearby nodes,
and calculate their tentative distances.
Step-6: Make a comparison of the current assigned value and the newly calculated
tentative distance; assign the smaller value.
Step-8: Now check every adjacent vertex of V, if sum of distance of u and weight of
edge is else the update it.
Step-9: Find the unvisited node assigned with the smallest tentative distance value, and
this will be the new “current mode”.
Step-10: Once the algorithm is over, we can backtrack from the destination vertex to
the source vertex to find the path.
int main()
{
int i=0,j=0;
int vertices=0,start_node=0;
//int graph[MAX][MAX] =
{{0,10,0,30,100},{10,0,50,0,0},{0,50,0,20,10},{30,0,20,0,60},{100,0,10,60,0}};
int graph[MAX][MAX] =
{{0,3,0,7,0,10},{3,0,4,2,0,0},{0,4,0,5,6,0},{7,2,5,0,4,2},{0,0,6,4,0,1},{10,0,0,2,1,0}};
printf("\n Enter The Number Of Vertices :");
scanf("%d",&vertices);
printf("\n Enter The Starting Node : ");
scanf("%d",&start_node);
djikstra(graph,vertices,start_node);
return 0;
}
SAMPLE OUTPUT
1. Which of the following algorithms is the best approach for solving single source shortest
path?
RESULT
Thus the implementation of djikstra’s algorithm using greedy technique has been
executed and verified successfully.
1.
LOGIC 30
CODE DESIGN 30
VIVA-VOCE 20
RECORD
20
SUBMISSION
TOTAL 100
Ex. No: 5 Implementation of Stable Marriage Problem using
Iterative Improvement Technique
Date:
AIM
ALGORITHM
Step-2: Consider a set Y = {m1, m2, . ., mn} of n men and a set X = {w1, w2, . . , wn}
of n women.
Step-3: Each man has a preference list ordering the women as potential marriage
partners with no ties allowed. Similarly, each woman has a preference list of the men,
also with no ties.
Step-4: Start with all the men and women being free.
Step-5: While there are free men, arbitrarily select one of them and do the following:
Step-6: Proposal - The selected free man m proposes to w, the next woman on his
preference list (who is the highest-ranked woman who has not rejected him before).
Step-8: If she prefers m to him, she accepts m’s proposal, making her former mate free,
otherwise, she simply rejects m’s proposal, leaving m free.
#include<stdbool.h>
#include<stdio.h>
#include<stdlib.h>
#define N 4
bool wPrefersM1OverM(int prefer[2*N][N], int w, int m, int m1)
{
int i;
// Check if w prefers m over her current engagement m1
for (i = 0; i < N; i++)
{
// If m1 comes before m in list of w, then w prefers her
// current engagement, don't do anything
if (prefer[w][i] == m1)
return true;
// If m comes before m1 in w's list, then free her current
// engagement and engage her with m
if (prefer[w][i] == m)
return false;
}
}
// Prints stable matching for N boys and N girls.
// Boys are numbered as 0 to N-1. Girls are numbered
// as N to 2N-1.
void stableMarriage(int prefer[2*N][N])
{
int wPartner[N];
int mFree[N],i;
for(i=0;i<N;i++)
{
wPartner[i]=-1;
mFree[i]=false;
}
int freeCount = N;
while (freeCount > 0)
{
// Pick the first free man (we could pick any)
int m,i;
for (m = 0; m < N; m++)
if (mFree[m] == false)
break;
for (i = 0; i < N && mFree[m] == false; i++)
{
int w = prefer[m][i];
if (wPartner[w-N] == -1)
{
wPartner[w-N] = m;
mFree[m] = true;
freeCount--;
}
else // If w is not free
{
// Find current engagement of w
int m1 = wPartner[w-N];
// If w prefers m over her current engagement m1,
// then break the engagement between w and m1 and
// engage m with w.
if (wPrefersM1OverM(prefer, w, m, m1) == false)
{
wPartner[w-N] = m;
mFree[m] = true;
mFree[m1] = false;
}
} // End of Else
} // End of the for loop that goes to all women in m's list
} // End of main while loop
printf("Woman Man\n");
for (i = 0; i < N; i++)
printf("%d \t %d\n ",i+N,wPartner[i]);
}
int main()
{
int i;
int prefer[2*N][N] =
{{7,5,6,4},{5,4,6,7},{4,5,6,7},{4,5,6,7},{0,1,2,3},{0,1,2,3},{0,1,2,3},{0,1,2,3}};
stableMarriage(prefer);
return 0;
}
SAMPLE OUTPUT
4 2
5 1
6 3
7 0
[student@a2it12 ~]$
VIVA QUESTIONS
1. When a free man proposes to an available woman, which of the following happens?
3. Consider the following ranking matrix. Assume that M1 and W2 are married. Now, M2
approaches W2. Which of the following happens?
RESULT
Thus the program to implement stable marriage problem using iterative improvement
technique has been verified and executed successfully.
1.
LOGIC 30
CODE DESIGN 30
VIVA-VOCE 20
RECORD
20
SUBMISSION
TOTAL 100
Ex. No: 6 Implementation of N-Queens Problem using
Backtracking Technique
Date:
AIM
ALGORITHM
Step-3: We start with the empty board and then place queen 1 in the first possible
position of its row, which is in column 1 of row 1.
Step-4: The four queens has to be placed in its own row, all we need to do is to assign
a column for each queen on the board.
Step-5: Start in the leftmost column. If all queens are placed return true.
a) If the queen can be placed safely in this row then mark this [row, column] as
part of the solution and recursively check if placing queen here leads to a
solution.
b) If placing the queen in [row, column] leads to a solution then return true.
c) If placing queen doesn't lead to a solution then unmark this [row, column]
Backtrack and go to step (a) to try other rows.
d) If all rows have been tried and nothing worked, return false to trigger
backtracking.
RESULT
Thus the program to implement n-queens problem using backtracking technique has
been verified and executed successfully.
1.
LOGIC 30
CODE DESIGN 30
VIVA-VOCE 20
RECORD
20
SUBMISSION
TOTAL 100