0% found this document useful (0 votes)
140 views32 pages

Daa Bits Manual-1

The document discusses two Java programs. The first program creates Student objects with details like USN, name, branch and phone, reads these details from the user, and displays them. The second program implements a stack using an array, with push(), pop() and display() methods. It also creates objects of subclasses Teaching, Technical and Contract that extend a Staff superclass, reads and displays details of staff objects under the three categories.

Uploaded by

IAm DEnZiL
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)
140 views32 pages

Daa Bits Manual-1

The document discusses two Java programs. The first program creates Student objects with details like USN, name, branch and phone, reads these details from the user, and displays them. The second program implements a stack using an array, with push(), pop() and display() methods. It also creates objects of subclasses Teaching, Technical and Contract that extend a Staff superclass, reads and displays details of staff objects under the three categories.

Uploaded by

IAm DEnZiL
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/ 32

DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 1a. 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, Name, Branch, Phone;

Scanner input = new Scanner(System.in);

void read() {
System.out.println("Enter Student Details");
System.out.println("Enter USN");
USN = input.nextLine();

System.out.println("Enter Name");
Name = input.nextLine();

System.out.println("Enter Branch");
Branch = input.nextLine();

System.out.println("Enter Phone");
Phone = input.nextLine();
}

void display() {
System.out.printf("%-20s %-20s %-20s %-20s", USN, Name, Branch, Phone);
}
}

class studentdetails {
public static void main(String[] args) {

Scanner input = new Scanner(System.in);


System.out.println("Enter number of student details to be created");
int number = input.nextInt();

Student s[] = new Student[number];

CSE DEPT, VKIT Page 1


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

// Read student details into array of student objects

for (int i = 0; i < number; i++) {


s[i] = new Student();
s[i].read();
}

// Display student information

System.out.printf("%-20s %-20s %-20s %-20s", "USN", "NAME", "BRANCH",


"PHONE");
for (int i = 0; i < number; i++) {
System.out.println();
s[i].display();
}
input.close();
}
}

CSE DEPT, VKIT Page 2


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 1b. Write a Java program to implement the Stack using arrays. Write Push(), Pop(), and
Display() methods to demonstrate its working.
*/
import java.util.*;

class arrayStack {
int arr[];
int top, max;

arrayStack(int n) {
max = n;
arr = new int[max];
top = -1;
}

void push(int i) {
if (top == max - 1)
System.out.println("Stack Overflow");
else
arr[++top] = i;
}

void pop() {
if (top == -1) {
System.out.println("Stack Underflow");
} else {
int element = arr[top--];
System.out.println("Popped Element: " + element);
}
}

void display() {
System.out.print("\nStack = ");
if (top == -1) {
System.out.print("Empty\n");
return;
}
for (int i = top; i >= 0; i--)
System.out.print(arr[i] + " ");
System.out.println();
}
}

class Stack {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);

CSE DEPT, VKIT Page 3


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

System.out.println("Enter Size of Integer Stack ");


int n = scan.nextInt();
boolean done = false;

arrayStack stk = new arrayStack(n);

char ch;
do {
System.out.println("\nStack Operations");
System.out.println("1. push");
System.out.println("2. pop");
System.out.println("3. display");
System.out.println("4. Exit");

int choice = scan.nextInt();


switch (choice) {
case 1:
System.out.println("Enter integer element to push");
stk.push(scan.nextInt());
break;

case 2:
stk.pop();
break;

case 3:
stk.display();
break;

case 4:
done = true;
break;

default:
System.out.println("Wrong Entry \n ");
break;

} while (!done);
}
}

CSE DEPT, VKIT Page 4


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 2a. 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.Scanner;

class Staff {
String StaffID, Name, Phone, Salary;

Scanner input = new Scanner(System.in);

void read() {
System.out.println("Enter StaffID");
StaffID = input.nextLine();

System.out.println("Enter Name");
Name = input.nextLine();

System.out.println("Enter Phone");
Phone = input.nextLine();

System.out.println("Enter Salary");
Salary = input.nextLine();
}

void display() {
System.out.printf("\n%-15s", "STAFFID: ");
System.out.printf("%-15s \n", StaffID);
System.out.printf("%-15s", "NAME: ");
System.out.printf("%-15s \n", Name);
System.out.printf("%-15s", "PHONE:");
System.out.printf("%-15s \n", Phone);
System.out.printf("%-15s", "SALARY:");
System.out.printf("%-15s \n", Salary);
}
}

class Teaching extends Staff {


String Domain, Publication;

void read_Teaching() {
super.read(); // call super class read method
System.out.println("Enter Domain");

CSE DEPT, VKIT Page 5


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

Domain = input.nextLine();
System.out.println("Enter Publication");
Publication = input.nextLine();
}

void display() {
super.display(); // call super class display() method
System.out.printf("%-15s", "DOMAIN:");
System.out.printf("%-15s \n", Domain);
System.out.printf("%-15s", "PUBLICATION:");
System.out.printf("%-15s \n", Publication);
}
}

class Technical extends Staff {


String Skills;

void read_Technical() {
super.read(); // call super class read method
System.out.println("Enter Skills");
Skills = input.nextLine();
}

void display() {
super.display(); // call super class display() method
System.out.printf("%-15s", "SKILLS:");
System.out.printf("%-15s \n", Skills);
}
}

class Contract extends Staff {


String Period;

void read_Contract() {
super.read(); // call super class read method
System.out.println("Enter Period");
Period = input.nextLine();
}

void display() {
super.display(); // call super class display() method
System.out.printf("%-15s", "PERIOD:");
System.out.printf("%-15s \n", Period);
}

CSE DEPT, VKIT Page 6


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

class Staffdetails {
public static void main(String[] args) {

Scanner input = new Scanner(System.in);

System.out.println("Enter number of staff details to be created");


int n = input.nextInt();

Teaching steach[] = new Teaching[n];


Technical stech[] = new Technical[n];
Contract scon[] = new Contract[n];

// Read Staff information under 3 categories

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


System.out.println("Enter Teaching staff information");
steach[i] = new Teaching();
steach[i].read_Teaching();
}

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


System.out.println("Enter Technical staff information");
stech[i] = new Technical();
stech[i].read_Technical();
}

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

System.out.println("Enter Contract staff information");


scon[i] = new Contract();
scon[i].read_Contract();
}

// Display Staff Information


System.out.println("\n STAFF DETAILS: \n");
System.out.println("-----TEACHING STAFF DETAILS----- ");

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


steach[i].display();
}

System.out.println();
System.out.println("-----TECHNICAL STAFF DETAILS-----");
for (int i = 0; i < n; i++) {

CSE DEPT, VKIT Page 7


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

stech[i].display();
}

System.out.println();
System.out.println("-----CONTRACT STAFF DETAILS-----");
for (int i = 0; i < n; i++) {
scon[i].display();
}

input.close();
}
}

/* 2b. 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.Scanner;
import java.util.StringTokenizer;

public class Customer {


public static void main(String[] args) {
String name;
Scanner scan = new Scanner(System.in);
System.out.println("Enter Name and Date_of_Birth in the format
<Name,DD/MM/YYYY>");
name = scan.next();

// create stringTokenizer with delimiter "/"


StringTokenizer st = new StringTokenizer(name, ",/");

// Count the number of tokens


int count = st.countTokens();

// Print one token at a time and induce new delimiter ","


for (int i = 1; i <= count && st.hasMoreTokens(); i++) {
System.out.print(st.nextToken());
if (i < count)
System.out.print(",");
}
}
}

CSE DEPT, VKIT Page 8


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 3a. 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.Scanner;

class exception {

public static void main(String[] args) {


int a, b, result;

Scanner input = new Scanner(System.in);


System.out.println("Input two integers");

a = input.nextInt();
b = input.nextInt();

try {
result = a / b;
System.out.println("Result = " + result);
}

catch (ArithmeticException e) {
System.out.println("Exception caught: Division by zero.");
}
}
}

CSE DEPT, VKIT Page 9


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 3b. Write a Java program that implements a multi-thread application that has three 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.Random;

class SquareThread implements Runnable {


int x;

SquareThread(int x) {
this.x = x;
}

public void run() {


System.out.println("Thread Name:Square Thread and Square of " + x + " is: " + x
* x);
}
}

class CubeThread implements Runnable {


int x;

CubeThread(int x) {
this.x = x;
}

public void run() {


System.out.println("Thread Name:Cube Thread and Cube of " + x + " is: " + x * x
* x);
}
}

class RandomThread implements Runnable {


Random r;
Thread t2, t3;

public void run() {


int num;
r = new Random();
try {

while (true) {
num = r.nextInt(100);
System.out.println("Main Thread and Generated Number is " +
num);
t2 = new Thread(new SquareThread(num));

CSE DEPT, VKIT Page 10


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

t2.start();

t3 = new Thread(new CubeThread(num));


t3.start();

Thread.sleep(1000);
System.out.println("--------------------------------------");
}
} catch (Exception ex) {
System.out.println("Interrupted Exception");
}
}
}

public class MainThread {


public static void main(String[] args) {

RandomThread thread_obj = new RandomThread();


Thread t1 = new Thread(thread_obj);
t1.start();
}
}

CSE DEPT, VKIT Page 11


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 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 divide-and-
conquer method works along with its time complexity analysis: worst case, average case and best
case.
*/
import java.util.Scanner;
import java.util.Arrays;
import java.util.Random;

public class QuickSortComplexity {


static final int MAX = 10005;
static int[] a = new int[MAX];
public static void main(String[] args) {

Scanner input = new Scanner(System.in);


System.out.print("Enter Max array size: ");
int n = input.nextInt();
Random random = new Random();
System.out.println("Enter the array elements: ");
for (int i = 0; i < n; i++)
a[i] = input.nextInt(); // for keyboard entry
// a[i] = random.nextInt(1000); // generate
// random numbers – uniform distribution

// a = Arrays.copyOf(a, n); // keep only non zero elements


// Arrays.sort(a); // for worst-case time complexity

System.out.println("Input Array:");
for (int i = 0; i < n; i++)
System.out.print(a[i] + " ");
// set start time
long startTime = System.nanoTime();
QuickSortAlgorithm(0, n - 1);
long stopTime = System.nanoTime();
long elapsedTime = stopTime - startTime;
System.out.println("\nSorted Array:");
for (int i = 0; i < n; i++)
System.out.print(a[i] + " ");
System.out.println();
System.out.println("Time Complexity in ms for
n=" + n + " is: " + (double) elapsedTime / 1000000);
}

public static void QuickSortAlgorithm(int p, int r) {

CSE DEPT, VKIT Page 12


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

int i, j, temp, pivot;


if (p < r) {
i = p;
j = r + 1;
pivot = a[p]; // mark first element as pivot
while (true) {
i++;
while (a[i] < pivot && i < r)
i++;
j--;
while (a[j] > pivot)
j--;
if (i < j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
} else
break; // partition is over
}
a[p] = a[j];
a[j] = pivot;
QuickSortAlgorithm(p, j - 1);
QuickSortAlgorithm(j + 1, r);
}
}
}

CSE DEPT, VKIT Page 13


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 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 divide-
and-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 MergeSort2 {


static final int MAX = 10005;
static int[] a = new int[MAX];

public static void main(String[] args) {


Scanner input = new Scanner(System.in);
System.out.print("Enter Max array size: ");
int n = input.nextInt();
Random random = new Random();
System.out.println("Enter the array elements: ");
for (int i = 0; i < n; i++)
// a[i] = input.nextInt(); // for keyboard entry
a[i] = random.nextInt(1000); // generate random numbers –
// uniform distribution
long startTime = System.nanoTime();
MergeSortAlgorithm(0, n - 1);
long stopTime = System.nanoTime();
long elapsedTime = stopTime - startTime;
System.out.println("Time Complexity (ms) for n = " +
n + " is : " + (double) elapsedTime / 1000000);
System.out.println("Sorted Array (Merge Sort):");
for (int i = 0; i < n; i++)
System.out.print(a[i] + " ");
input.close();
}

public static void MergeSortAlgorithm(int low, int high) {


int mid;
if (low < high) {
mid = (low + high) / 2;
MergeSortAlgorithm(low, mid);
MergeSortAlgorithm(mid + 1, high);
Merge(low, mid, high);
}
}

CSE DEPT, VKIT Page 14


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

public static void Merge(int low, int mid, int high) {


int[] b = new int[MAX];
int i, h, j, k;
h = i = low;
j = mid + 1;
while ((h <= mid) && (j <= high))
if (a[h] < a[j])
b[i++] = a[h++];
else
b[i++] = a[j++];

if (h > mid)
for (k = j; k <= high; k++)
b[i++] = a[k];
else
for (k = h; k <= mid; k++)
b[i++] = a[k];

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


a[k] = b[k];
}
}

CSE DEPT, VKIT Page 15


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 6.Implement in Java, the 0/1 Knapsack problem using (a) Dynamic Programming method
Knapsack DP
*/

import java.util.Scanner;

public class KnapsackDP {


static final int MAX = 20; // max. no. of objects
static int w[]; // weights 0 to n-1
static int p[]; // profits 0 to n-1
static int n; // no. of objects
static int M; // capacity of Knapsack
static int V[][]; // DP solution process - table
static int Keep[][]; // to get objects in optimal solution

public static void main(String args[]) {


w = new int[MAX];
p = new int[MAX];
V = new int [MAX][MAX];
Keep = new int[MAX][MAX];
int optsoln;
ReadObjects();
for (int i = 0; i <= M; i++)
V[0][i] = 0;
for (int i = 0; i <= n; i++)
V[i][0] = 0;
optsoln = Knapsack();
System.out.println("Optimal solution = " + optsoln);
}

static int Knapsack() {


int r; // remaining Knapsack capacity
for (int i = 1; i <= n; i++)
for (int j = 0; j <= M; j++)
if ((w[i] <= j) && (p[i] + V[i - 1][j - w[i]] > V[i - 1][j])) {
V[i][j] = p[i] + V[i - 1][j - w[i]];
Keep[i][j] = 1;
} else {
V[i][j] = V[i - 1][j];
Keep[i][j] = 0;
}

// Find the objects included in the Knapsack


r = M;
System.out.println("Items = ");
for (int i = n; i > 0; i--) // start from Keep[n,M]

CSE DEPT, VKIT Page 16


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

if (Keep[i][r] == 1) {
System.out.println(i + " ");
r = r - w[i];
}
System.out.println();
return V[n][M];
}

static void ReadObjects() {


Scanner scanner = new Scanner(System.in);
System.out.println("Knapsack Problem - Dynamic Programming Solution: ");
System.out.println("Enter the max capacity of knapsack: ");
M = scanner.nextInt();
System.out.println("Enter number of objects: ");
n = scanner.nextInt();
System.out.println("Enter Weights: ");
for (int i = 1; i <= n; i++)
w[i] = scanner.nextInt();
System.out.println("Enter Profits: ");
for (int i = 1; i <= n; i++)
p[i] = scanner.nextInt();
scanner.close();
}
}

/* (b) Implement in Java, the 0/1 Knapsack problem usingKnapsack Greedy


*/

import java.util.Scanner;
class KObject { // Knapsack object details
float w;
float p;
float r;
}
public class KnapsackGreedy2 {
static final int MAX = 20; // max. no. of objects
static int n; // no. of objects
static float M; // capacity of Knapsack

public static void main(String args[]) {


Scanner scanner = new Scanner(System.in);
System.out.println("Enter number of objects: ");
n = scanner.nextInt();
KObject[] obj = new KObject[n];

CSE DEPT, VKIT Page 17


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

for(int i = 0; i<n;i++)
obj[i] = new KObject();// allocate memory for members

ReadObjects(obj);
Knapsack(obj);
scanner.close();
}

static void ReadObjects(KObject obj[]) {


KObject temp = new KObject();
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the max capacity of knapsack: ");
M = scanner.nextFloat();

System.out.println("Enter Weights: ");


for (int i = 0; i < n; i++)
obj[i].w = scanner.nextFloat();

System.out.println("Enter Profits: ");


for (int i = 0; i < n; i++)
obj[i].p = scanner.nextFloat();

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


obj[i].r = obj[i].p / obj[i].w;

// sort objects in descending order, based on p/w ratio


for(int i = 0; i<n-1; i++)
for(int j=0; j<n-1-i; j++)
if(obj[j].r < obj[j+1].r){
temp = obj[j];
obj[j] = obj[j+1];
obj[j+1] = temp;
}
scanner.close();
}

static void Knapsack(KObject kobj[]) {


float x[] = new float[MAX];
float totalprofit;
int i;
float U; // U place holder for M
U = M;
totalprofit = 0;
for (i = 0; i < n; i++)
x[i] = 0;
for (i = 0; i < n; i++) {

CSE DEPT, VKIT Page 18


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

if (kobj[i].w > U)
break;
else {
x[i] = 1;
totalprofit = totalprofit + kobj[i].p;
U = U - kobj[i].w;
}
}
System.out.println("i = " + i);
if (i < n)
x[i] = U / kobj[i].w;
totalprofit = totalprofit + (x[i] * kobj[i].p);
System.out.println("The Solution vector, x[]: ");
for (i = 0; i < n; i++)
System.out.print(x[i] + " ");
System.out.println("\nTotal profit is = " + totalprofit);
}
}

From a given vertex in a weighted connected graph, find shortest paths to other vertices using

CSE DEPT, VKIT Page 19


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 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.*;

public class DijkstrasClass {

final static int MAX = 20;


final static int infinity = 9999;
static int n; // No. of vertices of G
static int a[][]; // Cost matrix
static Scanner scan = new Scanner(System.in);

public static void main(String[] args) {


ReadMatrix();
int s = 0; // starting vertex
System.out.println("Enter starting vertex: ");
s = scan.nextInt();
Dijkstras(s); // find shortest path
}

static void ReadMatrix() {


a = new int[MAX][MAX];
System.out.println("Enter the number of vertices:");
n = scan.nextInt();
System.out.println("Enter the cost adjacency matrix:");
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
a[i][j] = scan.nextInt();
}

static void Dijkstras(int s) {


int S[] = new int[MAX];
int d[] = new int[MAX];
int u, v;
int i;
for (i = 1; i <= n; i++) {
S[i] = 0;
d[i] = a[s][i];
}
S[s] = 1;
d[s] = 1;
i = 2;
while (i <= n) {

CSE DEPT, VKIT Page 20


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

u = Extract_Min(S, d);
S[u] = 1;
i++;
for (v = 1; v <= n; v++) {
if (((d[u] + a[u][v] < d[v]) && (S[v] == 0)))
d[v] = d[u] + a[u][v];
}
}
for (i = 1; i <= n; i++)
if (i != s)
System.out.println(i + ":" + d[i]);
}

static int Extract_Min(int S[], int d[]) {


int i, j = 1, min;
min = infinity;
for (i = 1; i <= n; i++) {
if ((d[i] < min) && (S[i] == 0)) {
min = d[i];
j = i;
}
}
return (j);
}
}

CSE DEPT, VKIT Page 21


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 8. Find Minimum Cost Spanning Tree of a given connected undirected graph using
Kruskal'salgorithm. Use Union-Find algorithms in your program.*/

import java.util.Scanner;

public class KruskalsClass {

final static int MAX = 20;


static int n; // No. of vertices of G
static int cost[][]; // Cost matrix
static Scanner scan = new Scanner(System.in);

public static void main(String[] args) {


ReadMatrix();
Kruskals();
}

static void ReadMatrix() {

int i, j;
cost = new int[MAX][MAX];

System.out.println("Implementation of Kruskal's algorithm");


System.out.println("Enter the no. of vertices");
n = scan.nextInt();

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


for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++) {
cost[i][j] = scan.nextInt();
if (cost[i][j] == 0)
cost[i][j] = 999;
}
}
}

static void Kruskals() {

int a = 0, b = 0, u = 0, v = 0, i, j, ne = 1, min, mincost = 0;

System.out.println("The edges of Minimum Cost Spanning Tree are");


while (ne < n) {
for (i = 1, min = 999; i <= n; i++) {

CSE DEPT, VKIT Page 22


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

for (j = 1; j <= n; j++) {


if (cost[i][j] < min) {
min = cost[i][j];
a = u = i;
b = v = j;
}
}
}
u = find(u);
v = find(v);
if (u != v) {
uni(u, v);
System.out.println(ne++ + "edge (" + a + "," + b + ") =" + min);
mincost += min;
}
cost[a][b] = cost[b][a] = 999;
}
System.out.println("Minimum cost :" + mincost);
}

static int find(int i) {


int parent[] = new int[9];
while (parent[i] == 1)
i = parent[i];
return i;
}

static void uni(int i, int j) {


int parent[] = new int[9];
parent[j] = i;
}
}

CSE DEPT, VKIT Page 23


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 9. Find Minimum Cost Spanning Tree of a given connected undirected graph using Prim's algorithm.
*/

import java.util.Scanner;

public class PrimsClass {

final static int MAX = 20;


static int n; // No. of vertices of G
static int cost[][]; // Cost matrix
static Scanner scan = new Scanner(System.in);

public static void main(String[] args) {


ReadMatrix();
Prims();
}

static void ReadMatrix() {


int i, j;
cost = new int[MAX][MAX];

System.out.println("\n Enter the number of nodes:");


n = scan.nextInt();
System.out.println("\n Enter the adjacency matrix:\n");
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++) {
cost[i][j] = scan.nextInt();
if (cost[i][j] == 0)
cost[i][j] = 999;
}
}

static void Prims() {

int visited[] = new int[10];


int ne = 1, i, j, min, a = 0, b = 0, u = 0, v = 0;
int mincost = 0;

visited[1] = 1;
while (ne < n) {
for (i = 1, min = 999; i <= n; i++)
for (j = 1; j <= n; j++)
if (cost[i][j] < min)
if (visited[i] != 0) {
min = cost[i][j];
a = u = i;

CSE DEPT, VKIT Page 24


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

b = v = j;
}
if (visited[u] == 0 || visited[v] == 0) {
System.out.println("Edge" + ne++ + ":(" + a + "," + b + ")" +
"cost:" + min);
mincost += min;
visited[b] = 1;
}
cost[a][b] = cost[b][a] = 999;
}
System.out.println("\n Minimun cost" + mincost);
}

CSE DEPT, VKIT Page 25


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 10a. Write Java programs to


(a) Implement All-Pairs Shortest Paths problem using Floyd's algorithm.
*/
import java.util.Scanner;
public class FloydsClass {
static final int MAX = 20; // max. size of cost matrix
static int a[][]; // cost matrix
static int n; // actual matrix size

public static void main(String args[]) {


a = new int[MAX][MAX];
ReadMatrix();
Floyds(); // find all pairs shortest path
PrintMatrix();
}

static void ReadMatrix() {


System.out.println("Enter the number of vertices\n");
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
System.out.println("Enter the Cost Matrix (999 for infinity) \n");
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
a[i][j] = scanner.nextInt();
}
}
scanner.close();
}

static void Floyds() {


for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if ((a[i][k] + a[k][j]) < a[i][j])
a[i][j] = a[i][k] + a[k][j];
}
}
static void PrintMatrix() {
System.out.println("The All Pair Shortest Path Matrix is:\n");
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
System.out.print(a[i][j] + "\t");
System.out.println("\n");
}
}
}

CSE DEPT, VKIT Page 26


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 10b. Implement Travelling Sales Person problem using Dynamic programming.


*/

import java.util.Scanner;

public class TravSalesPerson {


static int MAX = 100;
static final int infinity = 999;

public static void main(String args[]) {


int cost = infinity;
int c[][] = new int[MAX][MAX]; // cost matrix
int tour[] = new int[MAX]; // optimal tour
int n; // max. cities
System.out.println("Travelling Salesman Problem using Dynamic
Programming\n");
System.out.println("Enter number of cities: ");
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
System.out.println("Enter Cost matrix:\n");
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
c[i][j] = scanner.nextInt();
if (c[i][j] == 0)
c[i][j] = 999;
}
for (int i = 0; i < n; i++)
tour[i] = i;
cost = tspdp(c, tour, 0, n);
// print tour cost and tour
System.out.println("Minimum Tour Cost: " + cost);
System.out.println("\nTour:");
for (int i = 0; i < n; i++) {
System.out.print(tour[i] + " -> ");
}
System.out.println(tour[0] + "\n");
scanner.close();
}

static int tspdp(int c[][], int tour[], int start, int n) {


int i, j, k;
int temp[] = new int[MAX];
int mintour[] = new int[MAX];
int mincost;
int cost;
if (start == n - 2)

CSE DEPT, VKIT Page 27


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

return c[tour[n - 2]][tour[n - 1]] + c[tour[n - 1]][0];


mincost = infinity;
for (i = start + 1; i < n; i++) {
for (j = 0; j < n; j++)
temp[j] = tour[j];
temp[start + 1] = tour[i];
temp[i] = tour[start + 1];
if (c[tour[start]][tour[i]] + (cost = tspdp(c, temp, start + 1, n)) < mincost) {
mincost = c[tour[start]][tour[i]] + cost;
for (k = 0; k < n; k++)
mintour[k] = temp[k];
}
}
for (i = 0; i < n; i++)
tour[i] = mintour[i];
return mincost;
}
}

CSE DEPT, VKIT Page 28


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 11. 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.
*/

import java.util.Scanner;

public class SumOfsubset {


final static int MAX = 10;
static int n;
static int S[];
static int soln[];
static int d;

public static void main(String args[]) {


S = new int[MAX];
soln = new int[MAX];
int sum = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter number of elements: ");
n = scanner.nextInt();

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


for (int i = 1; i <= n; i++)
S[i] = scanner.nextInt();
System.out.println("Enter the max. subset value(d): ");
d = scanner.nextInt();
for (int i = 1; i <= n; i++)
sum = sum + S[i];
if (sum < d || S[1] > d)
System.out.println("No Subset possible");
else
SumofSub(0, 0, sum);
scanner.close();
}

static void SumofSub(int i, int weight, int total) {


if (promising(i, weight, total) == true)
if (weight == d) {
for (int j = 1; j <= i; j++) {
if (soln[j] == 1)
System.out.print(S[j] + " ");
}
System.out.println();
} else {
soln[i + 1] = 1;

CSE DEPT, VKIT Page 29


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

SumofSub(i + 1, weight + S[i + 1], total - S[i + 1]);


soln[i + 1] = 0;
SumofSub(i + 1, weight, total - S[i + 1]);
}
}

static boolean promising(int i, int weight, int total) {


return ((weight + total >= d) && (weight == d || weight + S[i + 1] <= d));
}
}

CSE DEPT, VKIT Page 30


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

/* 12. Design and implement in Java to find all Hamiltonian Cycles in a connected undirected
Graph G of n vertices using backtracking principle.
*/

import java.util.Scanner;

public class Hamiltonian {


boolean found = false;
int G[][];// = new int[n + 1][n + 1];
int x[];// = new int[n + 1];
int n;

public static void main(String args[]) {


Hamiltonian hamiltonian = new Hamiltonian();
hamiltonian.getData();
System.out.println("\nSolution:");
hamiltonian.HamiltonianMethod(2);
hamiltonian.printNoSlnPossible();

public void printNoSlnPossible() {


if (found == false)
System.out.println("No Solution possible!");
}

public void getData() {


Scanner scanner = new Scanner(System.in);
System.out.println("\t\t\t\tHamiltonian Cycle");
System.out.print("\nEnter the number of the vertices: ");
// int n;
n = scanner.nextInt();
G = new int[n + 1][n + 1];
x = new int[n + 1];
System.out.print("\nIf edge between the following vertices enter 1 else 0:\n");
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
if ((i != j) && (i < j)) {
System.out.print(i + " and " + j + ": ");
G[j][i] = G[i][j] = scanner.nextInt();
}
if (i == j)
G[i][j] = 0;
}
for (int i = 1; i <= n; i++)
x[i] = 0;
x[1] = 1;

CSE DEPT, VKIT Page 31


DESIGN AND ANALYSIS OF ALGORITHMS (15CSL47)

scanner.close();
}

void HamiltonianMethod(int k) {
while (true) {
NextValue(k, G, x, n);
if (x[k] == 0)
return;
if (k == n) {
for (int i = 1; i <= k; i++)
System.out.print(x[i] + " ");
System.out.println(x[1]);
System.out.println();
found = true;
return;
} else
HamiltonianMethod(k + 1);
}
}

void NextValue(int k, int G[][], int x[], int n) {


while (true) {
x[k] = (x[k] + 1) % (n + 1);
if (x[k] == 0)
return;
if (G[x[k - 1]][x[k]] != 0) {
int j;
for (j = 1; j < k; j++)
if (x[k] == x[j])
break;
if (j == k)
if ((k < n) || ((k == n) && G[x[n]][x[1]] != 0))
return;
}
}
}
}

CSE DEPT, VKIT Page 32

You might also like