This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
MC9228 ALGORITHMS LAB
1. Quick Sort
2. Binary Search
3. Binary Tree Traversal
4. Warshall’s Algorithm
5. Dijkstra’s Algorithm
6. Prim’s Algorithm
7. Knapsack Problem – Dynamic Programming
8. Subset Sum Problem – Backtracking
9. Travelling salesperson problem – Branch and Bound
10. Strassen’s matrix multiplication
/* ============
QUICK SORT
============ */
#include<stdio.h>
#include<conio.h>
void main()
{
int a[10],i,n;
void quicksort(int [],int,int);
clrscr();
printf("\n\t\t\t QUICK SORT");
printf("\n\t\t\t ==========\n");
printf("\n\t\t ENTER THE NUMBER OF TERMS:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\n\t\t ENTER %d VALUE:",i+1);
scanf("%d",&a[i]);
}
quicksort(a,0,n-1);
printf("\n\t\t THE SORTED ELEMENTS ARE AS FOLLOWS:");
for(i=0;i<n;i++)
printf("\n\n\t\t\t\t\t%d",a[i]);
getch();
}
int partition(int a[],int l,int r)
{
int p,i,j,temp;
p = a[l];
i = l;
j = r+1;
while(i<j)
{
do
{
i++;
}
while(a[i]<p);
do
{
j--;
}
while(a[j]>p);
if(i<j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
a[l] = a[j];
a[j] = p;
return(j);
}
void quicksort(int a[],int l,int r)
{
int s;
int partition(int [],int,int);
if(l>=r)
{
return;
}
s = partition(a,l,r);
quicksort(a,l,s-1);
quicksort(a,s+1,r);
}
OUTPUT:
QUICK SORT
==========
ENTER THE NUMBER OF TERMS:5
ENTER 1 VALUE:56
ENTER 2 VALUE:86
ENTER 3 VALUE:12
ENTER 4 VALUE:-1
ENTER 5 VALUE:0
THE SORTED ELEMENTS ARE AS FOLLOWS:
-1
0
12
56
86
/* ===============BINARY SEARCH
=============== */#include<stdio.h>
#include<conio.h>
void main()
{
int i,j,n,a[100],t,low,mid,high,x,s=0;
clrscr();
printf("\n\t\t\t BINARY SEARCH");
printf("\n\t\t\t =============\n");
printf("\n\t\t ENTER NUMBER OF TERMS:");
scanf("%d",&n);
printf("\n\t\t ENTER THE NUMBERS ONE BY ONE:");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
printf("\n\t\t THE SORTED ELEMENTS ARE:");
for(i=0;i<n;i++)
{
printf("\n\n\t\t\t\t %d",a[i]);
}
printf("\n\n\t\t ENTER THE ELEMENTS TO BE SEARCH:");
scanf("%d",&x);
low = 0;
high = n-1;
while(low <= high)
{
mid = (low+high) / 2;
if(x<a[mid])
high = mid-1;
else if(x>a[mid])
low = mid+1;
else if(x == a[mid])
{
s=1;
break;
}
}
if(s == 1)
{
printf("\n\n\t\t THE NUMBER %d IS FOUND IN THE",x);
printf(" POSITION %d",mid+1);
}
else
{
printf("\n\t\t THE NUMBER %d IS NOT FOUND",x);
}
getch();
}
OUTPUT:
BINARY SEARCH
==============
ENTER NUMBER OF TERMS:5
ENTER THE NUMBERS ONE BY ONE:56 34 89 31 22
THE SORTED ELEMENTS ARE:
22
31
34
56
89
ENTER THE ELEMENTS TO BE SEARCH:89
THE NUMBER 89 IS FOUND IN THE POSITION 5
BINARY SEARCH
==============
ENTER NUMBER OF TERMS:5
ENTER THE NUMBERS ONE BY ONE:56 34 89 31 22
THE SORTED ELEMENTS ARE:
22
31
34
56
89
ENTER THE ELEMENTS TO BE SEARCH:88
THE NUMBER 88 IS NOT FOUND
/* ======================= BINARY TREE TRAVERSAL ======================= */
#include<stdio.h>
#include<conio.h>
#define NULL 0
struct node
{
int info;
struct node *left,*right;
};
struct node *root;
struct node *maketree(int x)
{
struct node *p;
p = (struct node *) malloc (sizeof(struct node));
p->info = x;
p->left = NULL;
p->right = NULL;
return(p);
}
void setleft(struct node * p,int x)
{
p->left = maketree(x);
}
void setright(struct node * p,int x)
{
p->right = maketree(x);
}
void createtree(int x)
{
root = maketree(x);
}
void inserttree(int x)
{
struct node *p,*q;
q = root;
while(q!=NULL)
{
p=q;
if(x<p->info)
q = p->left;
else
q = p->right;
}
if(x<p->info)
setleft(p,x);
else
setright(p,x);
}
void preorder(struct node *p)
{
if(p!=NULL)
{
printf("\n\t\t\t\t %d",p->info);
preorder(p->left);
preorder(p->right);
}
}
void inorder(struct node *p)
{
if(p!=NULL)
{
inorder(p->left);
printf("\n\t\t\t\t %d",p->info);
inorder(p->right);
}
}
void postorder(struct node *p)
{
if(p!=NULL)
{
postorder(p->left);
postorder(p->right);
printf("\n\t\t\t\t %d",p->info);
}
}
void main()
{
int ch,x;
root = NULL;
clrscr();
printf("\n\t\t BINARY TREE TRAVERSAL");
printf("\n\t\t =====================\n");
printf("\n\t\t\t 1.CREATE");
printf("\n\t\t\t 2.INSERT");
printf("\n\t\t\t 3.PREORDER");
printf("\n\t\t\t 4.INORDER");
printf("\n\t\t\t 5.POSTORDER");
printf("\n\t\t\t 6.EXIT\n");
do
{
printf("\n\t\t ENTER YOUR CHOICE:");
scanf("%d",&ch);
switch(ch)
{
case 1:
if(root == NULL)
{
printf("\n\t\t ENTER THE DATA:");
scanf("%d",&x);
createtree(x);
}
else
printf("\n\t\t ALREADY CREATED");
break;
case 2:
printf("\n\t\t ENTER THE DATA TO BE INSERTED:");
scanf("%d",&x);
inserttree(x);
break;
case 3:
printf("\n\t\t\t PREORDER TRAVERSAL");
printf("\n\t\t\t ==================\n");
preorder(root);
break;
case 4:
printf("\n\t\t\t INORDER TRAVERSAL");
printf("\n\t\t\t =================\n");
inorder(root);
break;
case 5:
printf("\n\t\t\t POSTORDER TRAVERSAL");
printf("\n\t\t\t ===================\n");
postorder(root);
break;
case 6:
exit(0);
break;
}
}while(ch!=6);
getch();
}
OUTPUT:
BINARY TREE TRAVERSAL**************************
1.CREATE
2.INSERT
3.PREORDER
4.INORDER
5.POSTORDER
6.EXIT
ENTER YOUR CHOICE:1
ENTER THE DATA:45
ENTER YOUR CHOICE:2
ENTER THE DATA TO BE INSERTED:88
ENTER YOUR CHOICE:2
ENTER THE DATA TO BE INSERTED:34
ENTER YOUR CHOICE:2
ENTER THE DATA TO BE INSERTED:56
ENTER YOUR CHOICE:3
PREORDER TRAVERSAL
====================
45
34
88
56
ENTER YOUR CHOICE:4
INORDER TRAVERSAL ===================
34
45
56
88
ENTER YOUR CHOICE:5
POSTORDER TRAVERSAL =====================
34
56
88
45
ENTER YOUR CHOICE:6
/* =====================
WARSHALL'S ALGORITHM
====================== */
#include<stdio.h>
#include<conio.h>
void main()
{
int i,j,k,n,a[50][50],p[50][50],cflag;
clrscr();
printf("\n\t\t\t WARSHALL'S ALGORITHM");
printf("\n\t\t\t ====================\n");
printf("\n\t\t ENTER THE TOTAL NUMBER OF VERTICES:");
scanf("%d",&n);
printf("\n\t\t ENTER THE ADJACENCY MATRIX:");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("\t");
scanf("%d",&a[i][j]);
p[i][j] = a[i][j];
}
}
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
p[i][j] = p[i][j] | p[i][k] & p[k][j];
}
}
}
cflag = 0;
printf("\n\t\t\t PATH MATRIX");
printf("\n\t\t\t ===========\n\n\t\t");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("\t %d",p[i][j]);
if(p[i][j] == 1)
cflag = 1;
}
printf("\n\t\t");
}
if(cflag == 1)
printf("\n\t\t THERE IS A CYCLE IN THE GIVEN GRAPH");
getch();
}
OUTPUT:
WARSHALL'S ALGORITHM =======================
ENTER THE TOTAL NUMBER OF VERTICES:4
ENTER THE ADJACENCY MATRIX: 0 1 0 0
0 0 0 1
0 0 0 0
1 0 1 0
PATH MATRIX ============
1 1 1 1
1 1 1 1
0 0 0 0
1 1 1 1
THERE IS A CYCLE IN THE GIVEN GRAPH
/* ======================
DIJSKTRA'S ALGORITHM
====================== */
#include<stdio.h>
#include<conio.h>
int a[10][10];
void cgraph(int);
void fsp(int);
void disp(int);
int minvl(int[][10],int);
void main()
{
int n;
clrscr();
printf("\n\t\t\t DIJKSTRA'S ALGORITHM");
printf("\n\t\t\t ====================\n");
printf("\n\t\t ENTER THE NUMBER OF VERTICES:");
scanf("%d",&n);
printf("\n");
cgraph(n);
fsp(n);
disp(n);
getch();
}
void cgraph(int n)
{
int i,j;
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
if(i==j)
a[i][j]=0;
else
{
printf("\t\t IF PATH DOES NOT EXIT ENTER 1000:");
printf("\n\t\t ENTER THE COST FOR THE PATH %d --->%d:",i,j);
scanf("%d",&a[i][j]);
}
}
}
}
int minvl(int a[][10],int s)
{
int sml,i,j,pos;
sml = 9999;
for(i=2;i<=s;++i)
if(sml>a[1][i])
{
sml = a[1][i];
pos = i;
}
for(j=1;j<=s;++j)
a[i][j] = a[i][j+1];
return pos;
}
void fsp(int n)
{
int i,s,sml;
for(s=n;s>1;)
{
sml = minvl(a,s);
--s;
for(i=1;i<=n;++i)
{
if(i!=sml)
{
if(a[1][i]>(a[1][sml]+a[sml][i]))
a[1][i] = a[1][sml]+a[sml][i];
}
}
}
}
void disp(int n)
{
int i;
printf("\n\t\t\t SHORTEST PATH COST:");
printf("\n\t\t\t ===================");
for(i=1;i<=n;++i)
printf("\n\n\t\t\t PATH FROM 1 TO %d IS %d",i,a[1][i]);
}
OUTPUT:
DIJKSTRA'S ALGORITHM
=====================
ENTER THE NUMBER OF VERTICES:3
IF PATH DOES NOT EXIT ENTER 1000:
ENTER THE COST FOR THE PATH 1 --->2:6
IF PATH DOES NOT EXIT ENTER 1000:
ENTER THE COST FOR THE PATH 1 --->3:3
IF PATH DOES NOT EXIT ENTER 1000:
ENTER THE COST FOR THE PATH 2 --->1:1000
IF PATH DOES NOT EXIT ENTER 1000:
ENTER THE COST FOR THE PATH 2 --->3:4
IF PATH DOES NOT EXIT ENTER 1000:
ENTER THE COST FOR THE PATH 3 --->1:1000
IF PATH DOES NOT EXIT ENTER 1000:
ENTER THE COST FOR THE PATH 3 --->2:1000
SHORTEST PATH COST:
===================
PATH FROM 1 TO 1 IS 0
PATH FROM 1 TO 2 IS 6
PATH FROM 1 TO 3 IS 3
// PRIM’S ALGORITHM
#include<stdio.h>
#include<conio.h>
void main()
{
int a[10][10],t[10][10],nearm[10];
int x,y,i,j,k,n,l;
int b,c,h,min,mincost;
clrscr();
printf("\n\t PRIM'S ALGORITHM");
printf("\n\t ****** *********");
printf("\n Enter the No.of Nodes:");
scanf("%d",&n);
printf("\n Enter the Cost Matrix");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf("\n a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);
}
clrscr();
printf("\t\t PRIM'S ALGORITHMS USING GREEDY METHOD\n");