100% found this document useful (1 vote)
87 views

Design and Analysis of Algorithms Laboratory Manual-15CSL47 4 Semester CSE Department, CIT-Mandya Cbcs Scheme

This document contains a laboratory manual for the Design and Analysis of Algorithms course offered by the Computer Science and Engineering Department at CIT-Mandya. It provides instructions and sample code for 3 programming assignments: 1) Creating a Student class and printing student details, 2) Implementing a stack using arrays, and 3) Handling exceptions when dividing by zero and implementing a multithreaded program to calculate and print values. The manual was prepared by Hemachander N and Sachith B K, Assistant Professors in the CSE Department at CIT-Mandya.

Uploaded by

sachu195
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
100% found this document useful (1 vote)
87 views

Design and Analysis of Algorithms Laboratory Manual-15CSL47 4 Semester CSE Department, CIT-Mandya Cbcs Scheme

This document contains a laboratory manual for the Design and Analysis of Algorithms course offered by the Computer Science and Engineering Department at CIT-Mandya. It provides instructions and sample code for 3 programming assignments: 1) Creating a Student class and printing student details, 2) Implementing a stack using arrays, and 3) Handling exceptions when dividing by zero and implementing a multithreaded program to calculate and print values. The manual was prepared by Hemachander N and Sachith B K, Assistant Professors in the CSE Department at CIT-Mandya.

Uploaded by

sachu195
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/ 30

Design and Analysis of Algorithms

Laboratory Manual-15CSL47
4th Semester CSE Department,
CIT-Mandya
CBCS SCHEME

Prepared by,

Hemachander N, Sachith B K,

Asst Professor, Asst Professor,

Dept of CSE, CIT - Mandya.


[Design and Analysis of Algorithms Laboratory-15CSL47 ]

1. A .Create a Java class called Student with the following details as variables within
it.
(i) USN
(ii) Name
(iii) Branch
(iv) Phone
Write a Java program to create nStudent objects and print the USN, Name, Branch,
and
Phone of these objects with suitable headings.
import java.util.Scanner;
class student {
String USN;
String Name;
String Branch;
String Phone;
public static void main(String args[]){

Scanner key = new Scanner( System.in );

System.out.println("Enter number of students");


int n = key.nextInt();

student [] students = new student [n];

for(int i=0; i<n; i++)


{
students[i] = new student();
System.out.println("Enter USN of student "+(i+1));
students[i].USN= key.next();
System.out.println("Enter Name of student "+(i+1));
students[i].Name= key.next();
System.out.println("Enter Branch of student "+(i+1));
students[i].Branch= key.next();
System.out.println("Enter Phone number of student "+(i+1));
students[i].Phone= key.next();

}
System.out.println("The Student Details are as follows ");
for(int j=0;j<n;j++)
{
System.out.println("Details of student "+(j+1)+" is");
System.out.println("Usn is "+students[j].USN);
System.out.println("Name is "+students[j].Name);
System.out.println("Branch is "+students[j].Branch);
System.out.println("Phone Number is "+students[j].Phone);
}
}
}

[CSE Department, CIT-Mandya] Page 2


[Design and Analysis of Algorithms Laboratory-15CSL47 ]

1. (B) Write a Java program to implement the Stack using arrays. Write Push(), Pop(), and Display()
methods to demonstrate its working.
import java.util.Scanner;
public class StackDemo {
private int STACK_SIZE = 5;
int arr[] = new int[STACK_SIZE];
int top = -1;
public void push(int elem) {
if (top < STACK_SIZE - 1) {
arr[++top] = elem;
System.out.println("Element " + elem
+ " is pushed to Stack !");
} else {
System.out.println("Stack Overflow !");
}
}

public void pop() {


if (top >= 0) {
System.out.println("Popped element is "+arr[top--]);
} else {
System.out.println("Stack Underflow !");
}
}

public void display() {


if (top >= 0) {
System.out.println("Elements in stack are :");
for (int i = 0; i <= top; i++) {
System.out.println(arr[i]);
}
}
else
System.out.println("Stack Empty");
}

public static void main(String[] args) {


Scanner key = new Scanner( System.in );
StackDemo stackDemo = new StackDemo();

for(;;){
System.out.println("1: Push 2: Pop 3:Display 4:Exit ");
System.out.println("Enter choice");

int choice = key.nextInt();


switch(choice)
{
case 1: System.out.println("Enter element to push");
int elem= key.nextInt();
stackDemo.push(elem);
break;
case 2: stackDemo.pop();

[CSE Department, CIT-Mandya] Page 3


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
break;
case 3: stackDemo.display();
break;
case 4: break;
}
}
}
}
2 (A) Design a super class called Staff with details as StaffId, Name, Phone, Salary.
Extend this class by writing three subclasses namely Teaching (domain,
publications), Technical (skills), and Contract (period). Write a Java program to read
and display at least 3 staff objects of all three categories.
import java.util.*;
class Staff
{
private Integer staffId;
private String name;
private Long phone;
private Double salary;
publicvoid read()
{
Scanner scanner=newScanner(System.in);
System.out.println("Enter Name");
name=scanner.nextLine();
System.out.println("Enter StaffId");
staffId=scanner.nextInt();
System.out.println("Enter the Phone Number");
phone=scanner.nextLong();
System.out.println("Enter the Salary");
salary=scanner.nextDouble();
}
publicvoid display()
{
System.out.println("StaffId :"+staffId);
System.out.println("Name :"+name);
System.out.println("PhoneNo :"+phone);
System.out.println("Salary :"+salary);
}
}
class Teaching extends Staff
{
private String domain;
private Integer publications;

publicvoid read()
{
super.read();
Scanner scanner=newScanner(System.in);
System.out.println("Enter the Domain");
domain=scanner.nextLine();
System.out.println("Enter No.of Publications");
publications=scanner.nextInt();
}

[CSE Department, CIT-Mandya] Page 4


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
publicvoid display()
{
super.display();
System.out.println("Domain :"+domain);
System.out.println("No.of Publications :"+publications);

}
}
class Technical extends Staff
{
private String skills;
publicvoid read()
{
super.read();
Scanner scanner=newScanner(System.in);
System.out.println("Enter the Skills");
skills=scanner.nextLine();
}

publicvoid display()
{
super.display();
System.out.println("Skills :"+skills);

}
}
class Contract extends Staff
{
private Double period;
publicvoid read()
{
super.read();
Scanner scanner=newScanner(System.in);
System.out.println("Enter the contract period in years");
period=scanner.nextDouble();
}

publicvoid display()
{
super.display();
System.out.println("Contract Period :"+period);

}
classicecream {
publicstaticvoid main(String args[])
{
Staff teaching=new Teaching();
teaching.read();
teaching.display();

Staff technical=new Technical();


technical.read();
technical.display();

Staff contract=new Contract();

[CSE Department, CIT-Mandya] Page 5


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
contract.read();
contract.display();

}
2(B) Write a Java class called Customer to store their name and date_of_birth. The
date_of_birth format should be dd/mm/yyyy. Write methods to read customer data as
<name, dd/mm/yyyy> and display as <name, dd, mm, yyyy> using StringTokenizer
class considering the delimiter character as “/”.
)
import java.util.*;
class Customer
{
String name;
String date_of_birth;
String name_date_of_birth;
Scanner key = new Scanner(System.in);
public void read()
{
System.out.println("Enter name");
name=key.next();
System.out.println("Enter date of birth in format dd/mm/yyyy");
date_of_birth=key.next();
name_date_of_birth= "<"+name+","+date_of_birth+">";
System.out.println("The stored data is "+name_date_of_birth);

}
public void display()
{
StringTokenizer ob = new StringTokenizer(name_date_of_birth,"/");
System.out.println("After String Tokenizing using / as
delimiter");

while(ob.hasMoreTokens()){
if(ob.countTokens()>1)
System.out.print(ob.nextToken()+",");
else
System.out.println(ob.nextToken());
}
}
public static void main(String args[])
{
Customer customer = new Customer();
customer.read();
customer.display();

}
}
[CSE Department, CIT-Mandya] Page 6
[Design and Analysis of Algorithms Laboratory-15CSL47 ]

3 (A) Write a Java program to read two integers a and b. Compute a/b and print, when
b is not zero. Raise an exception when b is equal to zero.
import java.util.*;
class exception {
public static void main(String[] args){
float result;
Scanner in = new Scanner(System.in);
System.out.println("Enter numerator : ");
int a = in.nextInt();
System.out.print("Enter denominator : ");
int b = in.nextInt();
try
{
result = a/b;
System.out.println("The result is " +result);
} catch (Exception e) {
System.out.println("Exception Condition,Denominator is zero ");
System.out.println(e);
}
}
}

3(B) Write a Java program that implements a multi-thread application that hashtree
threads. First thread generates a random integer for every 1 second; second thread
computes the square of the number and prints; third thread will print the value of
cube of the number.
import java.util.*;

public class RandomThread extends Thread


{
public void run()
{
Random r=new Random();
try
{
for(int i=1;i<=5;i++)
{
System.out.println("Random Thread printing :
"+r.nextInt(1500));
Thread.sleep(1000);
}
}
[CSE Department, CIT-Mandya] Page 7
[Design and Analysis of Algorithms Laboratory-15CSL47 ]
catch (Exception e)
{
System.out.println(e.getMessage());
}

public class SquareThread extends Thread


{
public void run()
{
try
{
for(int i=1;i<=5;i++)
{
System.out.println("Square Thread Printing
Square("+i+") : "+i*i);
Thread.sleep(1000);
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}

}
public class CubeThread extends Thread
{
public void run()
{
try
{
for(int i=1;i<=5;i++)
{
System.out.println("Cube Thread Printing
Cube("+i+") : "+i*i*i);
Thread.sleep(1000);
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}

}
[CSE Department, CIT-Mandya] Page 8
[Design and Analysis of Algorithms Laboratory-15CSL47 ]
public class Demo {

public static void main(String[] args) {


RandomThread rt=new RandomThread();
rt.start();
SquareThread st=new SquareThread();
st.start();
CubeThread ct=new CubeThread();
ct.start();

}
4. Sort a given set of n integer elements using Quick Sort method and compute its time
complexity. Run the program for varied values of n > 5000 and record the time taken
to sort. Plot a graph of the time taken versus n on graph sheet. The elements can be
read from a file or can be generated using the random number generator. Demonstrate
using Java how the divideand- conquer method works along with its time complexity
analysis: worst case, average case and best case.
import java.util.Random;
import java.util.Scanner;

public class QuickSort {

public static int partition(int arr[], int low, int high)


{
int i = low, j = high;
int tmp;
int pivot = arr[low];

while (i <= j)
{
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j)
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
return i;
}

[CSE Department, CIT-Mandya] Page 9


[Design and Analysis of Algorithms Laboratory-15CSL47 ]

public static void quickSort(int arr[], int low, int high) {


int index = partition(arr, low, high);
if (low < index - 1)
quickSort(arr, low, index - 1);
if (index < high)
quickSort(arr, index, high);
}

public static void main(String[] args)


{
Scanner sc=new Scanner(System.in);
System.out.println("Enter No.of elements in the array,say
n>5000");
int n=sc.nextInt();
int []arr=new int[n];

Random r=new Random();


for(int i=0;i<n;i++)
{
arr[i]=r.nextInt(10000);
//System.out.println(arr[i]);
}
long start=System.currentTimeMillis();
quickSort(arr,0,n-1);
long end=System.currentTimeMillis();
System.out.println("Time taken is :"+(end-start)+" ms");
/*for(int i=0;i<n;i++)
System.out.println(arr[i]);*/

5. Sort a given set of n integer elements using Merge Sort method and compute its
time complexity. Run the program for varied values of n > 5000, and record the time
taken to sort. Plot a graph of the time taken versus n on graph sheet. The elements
can be read from a file or can be generated using the random number generator.
Demonstrate using Java how the divideand- conquer method works along with its time
complexity analysis: worst case, average case and best case.
import java.util.Random;
import java.util.Scanner;

public class MergeSort


{
static int a[];

[CSE Department, CIT-Mandya] Page 10


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
static int b[];

public static void merge(int a[], int low, int mid, int high)
{
int i, j, k;
i=low; j=mid+1; k=low;
while ( i<=mid && j<=high )
{
if( a[i] <= a[j] )
b[k++] = a[i++] ;
else
b[k++] = a[j++] ;
}
while (i<=mid) b[k++] = a[i++] ;
while (j<=high) b[k++] = a[j++] ;

for(k=low; k<=high; k++)


a[k] = b[k];
}

public static void mergeSort(int a[], int low, int high)


{
int mid;
if(low >= high)
return;
mid = (low+high)/2 ;
mergeSort(a, low, mid);
mergeSort(a, mid+1, high);
merge(a, low, mid, high);
}

public static void main(String[] args)


{
Scanner sc=new Scanner(System.in);
System.out.println("Enter No.of elements in the array,say
n>5000");
int n=sc.nextInt();
a=new int[n];
b=new int[n];
Random r=new Random();
for(int i=0;i<n;i++)
{
a[i]=r.nextInt(100000);
//System.out.println(a[i]);
}
long start=System.currentTimeMillis();
mergeSort(a,0,n-1);
long end=System.currentTimeMillis();
System.out.println("Time taken is :"+(end-start)+ " ms");
//for(int i=0;i<n;i++)
[CSE Department, CIT-Mandya] Page 11
[Design and Analysis of Algorithms Laboratory-15CSL47 ]
//System.out.println(a[i]);

}
6 Implement in Java, the 0/1 Knapsack problem using (a) Dynamic Programming
method (b) Greedy method.

import java.util.Scanner;
public class Dynamic
{
private int val[][],wt[],p[],x[];
private int n,m;

public void readData()


{
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number of items: ");
n = sc.nextInt();

System.out.println("Enter the capacity");


m=sc.nextInt();

val=new int[n+1][m+1];
wt=new int[n+1];
p=new int[n+1];
x=new int[n+1];

System.out.println("Enter the N weights : ");


for(int i=1;i<=n;i++)
wt[i]=sc.nextInt();
System.out.println("Enter the N profits");
for(int j=1;j<=n;j++)
p[j]=sc.nextInt();;
}

public void findProfit()


{
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
{
if(i==0||j==0)
val[i][j]=0;
else if(wt[i]>j)
val[i][j]=val[i-1][j];
else
val[i][j]=max(val[i-1][j],val[i-1][j-wt[i]]+p[i]);
}
}
[CSE Department, CIT-Mandya] Page 12
[Design and Analysis of Algorithms Laboratory-15CSL47 ]
public void printData()
{
System.out.println("Maximum profit is:"+val[n-1][m-1]);
for(int k=1;k<=n;k++)
x[k]=0;
int i=n;
int j=m;
while(i!=0 && j!=0)
{
if(val[i][j]!=val[i-1][j])
{
x[i]=1;
j=j-wt[i];
}
i=i-1;
}
System.out.println("The selected objects are : ");
for(int k=1;k<=n;k++)
if(x[k]==1)
System.out.print(k+" ");

int max(int a, int b)


{
return (a > b)? a : b;
}

/* static int knapSack(int W, int wt[], int val[], int n)


{
int i, w;
int [][]K = new int[n+1][W+1];

// Build table K[][] in bottom up manner


for (i = 0; i <= n; i++)
{
for (w = 0; w <= W; w++)
{
if (i==0 || w==0)
K[i][w] = 0;
else if (wt[i-1] <= w)
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w]);
else
K[i][w] = K[i-1][w];
}
}

return K[n][W];
}

[CSE Department, CIT-Mandya] Page 13


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
*/
public static void main(String[] args)
{
Dynamic d=new Dynamic();
d.readData();
d.findProfit();
d.printData();

}
}

(b) Greedy method.

import java.util.Scanner;
public class GreedyKnapsack
{

private double[] p;
private double[] wt;
private double[] take;
private int n,m;

public void readData()


{
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number of items: ");
n = sc.nextInt();

System.out.println("Enter the capacity");


m=sc.nextInt();

wt=new double[n];
p=new double[n];
take=new double[n];

System.out.println("Enter the N weights : ");


for(int i=0;i<n;i++)
wt[i]=sc.nextInt();
System.out.println("Enter the N profits");
for(int j=0;j<n;j++)
p[j]=sc.nextInt();;
}

public void unitPriceOrder()


{
for (int i = 0; i < p.length; i++)
{
for (int j = 1; j < (p.length - i); j++)
{
double x=p[j - 1] / wt[j - 1];
[CSE Department, CIT-Mandya] Page 14
[Design and Analysis of Algorithms Laboratory-15CSL47 ]
double y=p[j] / wt[j];
if (x <=y)
{
double temp = p[j - 1];
p[j - 1] = p[j];
p[j] = temp;

double temp1 = wt[j - 1];


wt[j - 1] = wt[j];
wt[j] = temp1;
}
}
}
}

public void Knapsack()


{
int j;
for (j = 0; j < p.length; j++)
{
take[j] = 0;
}
double total = m;
for (j = 0; j < p.length; j++)
{
if (wt[j] <= total)
{
take[j] = 1.00;
total = total - wt[j];
}
else
{
break;// to exit the for-loop
}
}
if (j < p.length)
{
take[j] = (double)(total / wt[j]);
}
}

public void print()


{
System.out.println("item profit weight Unit Price Take
weight");
for (int i = 0; i < p.length; i++)
{
if(take[i]>0.0)
{

[CSE Department, CIT-Mandya] Page 15


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
System.out.printf("%d %10.1f %10.1f %10.1f
%10.1f",i,p[i],wt[i],(p[i]/wt[i]),take[i]);
System.out.println();
}

}
}

public static void main(String args[])


{
GreedyKnapsack g = new GreedyKnapsack();
g.readData();
g.unitPriceOrder();
g.Knapsack();
System.out.println("Optimal soluation to knapsack is :");

System.out.println("=======+============+=======+============+==========");
g.print();
}
}

7 From a given vertex in a weighted connected graph, find shortest paths to other
vertices using Dijkstra's algorithm. Write the program in Java.
import java.util.Scanner;

public class Dijkstra


{
private final int NOEDGE=999;
private int n,v,cost[][],s[],d[];

public void cosmatrix()


{
Scanner sc=new Scanner(System.in);
System.out.println("Enter the Number of Vertices : ");
n=sc.nextInt();
cost=new int[n+1][n+1];
s=new int[n+1];
d=new int[n+1];

System.out.println("Enter the Cost Adjacency Matrix\n (Enter 999


if there is No edge)");
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
cost[i][j]=sc.nextInt();
}

public void print()


{
System.out.println("The Shortest Path with the cost is");
[CSE Department, CIT-Mandya] Page 16
[Design and Analysis of Algorithms Laboratory-15CSL47 ]
for (int i=1;i<=n;i++)
if (i!=v)
System.out.println("<"+v+">--<"+i+"> -->"+d[i]);
}

public void sspath()


{
int i,u,w;
Scanner sc=new Scanner(System.in);
System.out.println("Enter the Source Vertex");
v=sc.nextInt();

for(i=1;i<=n;i++)
{
s[i] =0;
d[i] = cost[v][i];
}

s[v] =1;
d[v] = 0;
i = 2;
while (i<=n)
{
u = choose();
s[u] = 1;
i++;
for (w=1;w<=n;w++)
{
if ((d[u]+cost[u][w] < d[w] ) && s[w]==0)
d[w] = d[u] + cost[u][w];
}
}
}

public int choose()


{
int w=0,j,min;
min = NOEDGE;
for(j=1;j<=n;j++)
{
if (d[j]<min && s[j]==0)
{
min = d[j];
w = j;
}
}
return w;
}

public static void main(String[] args) {


[CSE Department, CIT-Mandya] Page 17
[Design and Analysis of Algorithms Laboratory-15CSL47 ]
Dijkstra d=new Dijkstra();
d.cosmatrix();
d.sspath();
d.print();

8 Find Minimum Cost Spanning Tree of a given undirected graph using


(a) Kruskal's algorithm.
(b) Prim's algorithm. Implement the program in Java language.

import java.util.Scanner;

public class Kruskal


{
private int c[][]; //The edges along with cost is stored

public int n; //Number of nodes in the graph


public int m; //Number of edges in the graph

public void cost_adjacency_matrix()


{
Scanner sc=new Scanner(System.in);
System.out.println("Enter the number of nodes");
n=sc.nextInt();

c=new int[n][n];

System.out.println("Enter the adjacency matrix (Enter 999 if


there is No edge)");
for(int i=0;i<n;i++)
for(int j=0;j<n; j++)
c[i][j]=sc.nextInt();
}

//function to find root of a given vertex


int find(int v,int p[])
{
while(p[v]!=v)
v=p[v];
return v;
}

[CSE Department, CIT-Mandya] Page 18


[Design and Analysis of Algorithms Laboratory-15CSL47 ]

//function to merge two trees into a single tree


void union_ij(int i,int j,int p[])
{
if(i<j)
p[j]=i;
else
p[i]=j;
}

public void minimum_spanning_tree()


{
int count,i,min,j,u=0,v=0,k,sum;
int p[]=new int[n];
int t[][]=new int[n][2];
count=0; //initialize the number of edges selected
to zero
k=0; //points to the first selected edge of MST
sum=0; //initial cost of minimum spanning tree

for(i=0;i<n;i++) p[i]=i; //create forests with n vertices

//select n-1 edges for minimum spanning tree


while(count<n)
{
min=999;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(c[i][j]!=0&&c[i][j]<min)
{
min=c[i][j];
u=i;
v=j;
}
}
}
if(min==999) break; //no more root for the vertex u
i=find(u,p); //find the root for the vertex u
j=find(v,p); //find the root for the vertex v

if(i!=j) //if the roots of vertex u and v


are different

[CSE Department, CIT-Mandya] Page 19


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
{ //select the edge (u,v) as the edge
of MST
t[k][0]=u;
t[k][1]=v;
k++;
count++; //update the number of edges
selected for MST
sum+=min; //update the cost of the MST
union_ij(i,j,p); //merge the two trees with the
roots i and j
}
c[u][v]=c[v][u]=999;
//delete the edge (u,v) by storing
a big value
}
if(count==n-1)
{
System.out.println("cost of spanning tree="+sum);
System.out.println("Spanning Tree is shown below");
for(k=0;k<n-1;k++)
System.out.println(t[k][0]+","+t[k][1]);
return;
}
System.out.println("Spanning tree do not exist");
}

public static void main(String[] args)


{
Kruskal k=new Kruskal();

k.cost_adjacency_matrix();
k.minimum_spanning_tree();
}
}

(b) Prim's algorithm.


import java.util.Scanner;

public class Prims


{
private int n; //number of nodes in the graph
private int a[][]; //cost adjacency matrix

public void read_data()


{

[CSE Department, CIT-Mandya] Page 20


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
Scanner sc=new Scanner(System.in);
System.out.println("Enter the number of nodes");
n=sc.nextInt();
a=new int[n][n];

System.out.println("Enter the cost adjacency matrix (Enter


999 if there is No edge)");
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=sc.nextInt();
}

public void minimum_spanning_tree()


{
int u,v,min;
int sum; //holds the cost of the minimum
spanning tree
int k; //index for storing the edges
w.r.t minimum spanning tree
int t[][]=new int[n][2]; //holds the minimum spanning tree
int p[]=new int[n]; //holds the vertices selected
int d[]=new int[n]; //holds the weights for the
selected edges
int s[]=new int[n]; //has the information of what
nodes are visited
//and what nodes are not
visited
int source; //contains a vertex from which
least edge starts

//find the source vertex from which least edge starts


min=9999;
source=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]!=0 && a[i][j]<=min)
{
min=a[i][j];
source=i;
}
}
}
//initialization

[CSE Department, CIT-Mandya] Page 21


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
for(int i=0;i<n;i++)
{
d[i]=a[source][i];
s[i]=0;
p[i]=source;
}
s[source]=1; //add source to S
sum=0; //initial cost of minimum spanning tree
k=0; //used as index to store the edges
selected
for(int i=1;i<n;i++)
{
//find u and d[u] such that d[u] is minimum and u in V-S
min=9999;
u=-1;
for(int j=0;j<n;j++)
{
if(s[j]==0)
{
if(d[j]<=min)
{
min=d[j];
u=j;
}
}
}
//select an edge with least cost
t[k][0]=u;
t[k][1]=p[u];
k++;

//add the cost associated with edge to get total cost of


MSP
sum+=a[u][p[u]];

//add u to s
s[u]=1;

//find d[v] and p[v] for every v in V-S


for(v=0;v<n;v++)
{
if(s[v]==0 && a[u][v]<d[v])
{
d[v]=a[u][v];
p[v]=u;

[CSE Department, CIT-Mandya] Page 22


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
}
}
}

//check for the spanning tree


if(sum>=9999)
System.out.println("Spanning tree does not exist");
else
{
System.out.println("Spanning tree exists and minimum
spanning tree is");
for(int i=0;i<n-1;i++)
{
System.out.println(t[i][0]+" "+t[i][1]);
}
System.out.println("The cost the spanning tree = "+sum);
}

public static void main(String[] args)


{
Prims p=new Prims();
p.read_data();
p.minimum_spanning_tree();
}
}

9 Write Java programs to


(a) Implement All-Pairs Shortest Paths problem using Floyd's algorithm.
(b) Implement Travelling Sales Person problem using Dynamic programming.
import java.util.Scanner;

public class Floyds


{
private int c[][]; // The edges along with cost is stored
private int d[][];
public int n; // Number of nodes in the graph
public int m; // Number of edges in the graph

public void cost_adjacency_matrix()


{
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number of nodes");

[CSE Department, CIT-Mandya] Page 23


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
n = sc.nextInt();

c = new int[n][n];
d = new int[n][n];
System.out.println("Enter the adjacency matrix (Enter 999
if there is No edge)");
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
c[i][j] = sc.nextInt();
}

public int min(int a, int b)


{
return a < b ? a : b;
}

public void floyd()


{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
d[i][j] = c[i][j];

for (int k = 0; k < n; k++)


for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}

public void print()


{
System.out.println("The all pair shortest matrix is shown
below");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
System.out.printf("%5d", d[i][j]);
}
System.out.println();
}
}

public static void main(String[] args)


{
Floyds f=new Floyds();

[CSE Department, CIT-Mandya] Page 24


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
f.cost_adjacency_matrix();
f.floyd();
f.print();
}
}

(b) Travelling Sales Person problem

import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Stack;

public class TSPNearestNeighbour


{
private int numberOfNodes;
private Stack<Integer> stack;

public TSPNearestNeighbour()
{
stack = new Stack<Integer>();
}

public void tsp(int adjacencyMatrix[][])


{
numberOfNodes = adjacencyMatrix[1].length - 1;
int[] visited = new int[numberOfNodes + 1];
visited[1] = 1;
stack.push(1);
int element, dst = 0, i;
int min = Integer.MAX_VALUE;
boolean minFlag = false;
System.out.print(1 + "\t");

while (!stack.isEmpty())
{
element = stack.peek();
i = 1;
min = Integer.MAX_VALUE;
while (i <= numberOfNodes)
{
if (adjacencyMatrix[element][i] > 1 && visited[i] == 0)
{
if (min > adjacencyMatrix[element][i])
{
min = adjacencyMatrix[element][i];
dst = i;
minFlag = true;
}
}

[CSE Department, CIT-Mandya] Page 25


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
i++;
}
if (minFlag)
{
visited[dst] = 1;
stack.push(dst);
System.out.print(dst + "\t");
minFlag = false;
continue;
}
stack.pop();
}
}

public static void main(String... arg)


{
int number_of_nodes;
Scanner scanner = null;
try
{
System.out.println("Enter the number of nodes in the graph");
scanner = new Scanner(System.in);
number_of_nodes = scanner.nextInt();
int adjacency_matrix[][] = new int[number_of_nodes +
1][number_of_nodes + 1];
System.out.println("Enter the adjacency matrix");
for (int i = 1; i <= number_of_nodes; i++)
{
for (int j = 1; j <= number_of_nodes; j++)
{
adjacency_matrix[i][j] = scanner.nextInt();
}
}
for (int i = 1; i <= number_of_nodes; i++)
{
for (int j = 1; j <= number_of_nodes; j++)
{
if (adjacency_matrix[i][j] == 1 && adjacency_matrix[j][i]
== 0)
{
adjacency_matrix[j][i] = 1;
}
}
}
System.out.println("the citys are visited as follows");
TSPNearestNeighbour tspNearestNeighbour = new
TSPNearestNeighbour();
tspNearestNeighbour.tsp(adjacency_matrix);
} catch (InputMismatchException inputMismatch)
{
[CSE Department, CIT-Mandya] Page 26
[Design and Analysis of Algorithms Laboratory-15CSL47 ]
System.out.println("Wrong Input format");
}
scanner.close();
}
}
10 (a) Design and implement in Java to find a subset of a given set S = {Sl, S2,.....,Sn}
of n positive integers whose SUM is equal to a given positive integer d. For example, if
S ={1, 2, 5, 6, 8} and d= 9, there are two solutions {1,2,6}and {1,8}. Display a suitable
message, if the given problem instance doesn't have a solution.
(b) Design and implement the presence of Hamiltonian Cycle in an undirected Graph
G of n vertices.
import java.util.Scanner;

public class Subset


{
private int s[]=new int[10],x[]=new int[10],d,n;

public void read()


{
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number of elements:");
n = sc.nextInt();

System.out.println("Enter the set in increasing order");


for(int i=1;i<=n;i++)
s[i]=sc.nextInt();

System.out.println("Enter the subset sum:");


d=sc.nextInt();
}

public void check()


{
int sum=0,i;
for(i=1;i<=n;i++)
sum+=s[i];
if(sum<d || s[i]>d)
System.out.println("No subset possible");
else
{
System.out.println("Solutions are");
sumofsub(0,1,sum);

[CSE Department, CIT-Mandya] Page 27


[Design and Analysis of Algorithms Laboratory-15CSL47 ]
}

void sumofsub(int m,int k,int r)


{
x[k]=1;//Create left child(with kth element)
if((m+s[k])==d)
{
for(int i=1;i<=k;i++)
if(x[i]==1)
System.out.print(" "+s[i]+" ");
System.out.println();;
}
else
if(m+s[k]+s[k+1]<=d)
sumofsub(m+s[k],k+1,r-s[k]);
if((m+r-s[k]>=d) && (m+s[k+1]<=d))
{
x[k]=0;
sumofsub(m,k+1,r-s[k]);
}
}

public static void main(String[] args)


{
Subset s1=new Subset();
s1.read();
s1.check();
}

}
(b) Hamiltonian Cycle
import java.util.Scanner;
import java.util.Arrays;

public class HamiltonianCycle


{
private int V, pathCount;
private int[] path;
private int[][] graph;

public void findHamiltonianCycle(int[][] g)


{
V = g.length;
path = new int[V];

[CSE Department, CIT-Mandya] Page 28


[Design and Analysis of Algorithms Laboratory-15CSL47 ]

Arrays.fill(path, -1);
graph = g;
try
{
path[0] = 0;
pathCount = 1;
solve(0);
System.out.println("No solution");
}
catch (Exception e)
{
System.out.println(e.getMessage());
display();
}
}
public void solve(int vertex) throws Exception
{
if (graph[vertex][0] == 1 && pathCount == V)
throw new Exception("Solution found");
if (pathCount == V)
return;

for (int v = 0; v < V; v++)


{

if (graph[vertex][v] == 1 )
{
path[pathCount++] = v;
graph[vertex][v] = 0;
graph[v][vertex] = 0;

if (!isPresent(v))
solve(v);

graph[vertex][v] = 1;
graph[v][vertex] = 1;
path[--pathCount] = -1;
}
}
}
public boolean isPresent(int v)
{
for (int i = 0; i < pathCount - 1; i++)
if (path[i] == v)
return true;
return false;
}
public void display()
{
[CSE Department, CIT-Mandya] Page 29
[Design and Analysis of Algorithms Laboratory-15CSL47 ]
System.out.print("\nPath : ");
for (int i = 0; i <= V; i++)
System.out.print(path[i % V] +" ");
System.out.println();
}
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("HamiltonianCycle Algorithm Test\n");

HamiltonianCycle hc = new HamiltonianCycle();

System.out.println("Enter number of vertices\n");


int V = scan.nextInt();

System.out.println("\nEnter matrix\n");
int[][] graph = new int[V][V];
for (int i = 0; i < V; i++)
for (int j = 0; j < V; j++)
graph[i][j] = scan.nextInt();

hc.findHamiltonianCycle(graph);
}
}

[CSE Department, CIT-Mandya] Page 30

You might also like