Documente Academic
Documente Profesional
Documente Cultură
ANALYSIS OF
ALGORITHMS
PROJECT
1
1. Implement a program in C to search an element from a sorted array using binary search
ALGORITHM
Algorithm BinarySearch(a,n,x)
low = 1; high = n;
mid = [(low+high)/2];
return 0;
CODE
#include <stdio.h>
int main()
scanf("%d",&n);
scanf("%d",&array[c]);
scanf("%d", &search);
first = 0;
last = n - 1;
middle = (first+last)/2;
2
while (first <= last) {
first = middle + 1;
break;
else
last = middle - 1;
return 0;
OUTPUT
Enter 6 integers
12
19
33
24
5 found at location 3.
3
2. Implement a program in C to sort an array using Quick Sort
ALGORITHM
leftPointer = left;
rightPointer = right – 1;
break;
else
swap leftPointer,rightPointer;
swap leftPointer,right;
return leftPointer;
if (right-left <= 0)
return;
else
pivot = A[right];
quickSort(left,partition-1);
quickSort(partition+1,right);
4
CODE
#include<stdio.h>
int t = *a;
*a = *b;
*b = t;
int j;
i++;
swap(&arr[i], &arr[j]);
return (i + 1);
5
quickSort(arr, pi + 1, high);
int i;
printf("n");
int main()
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, n-1);
printArray(arr, n);
return 0;
OUTPUT
ALGORITHM
if ( n == 1 ) return a
l1 = mergesort( l1 )
6
l2 = mergesort( l2 )
end procedure
var c as array
else
end if
end while
end while
end while
return c
end procedure
CODE
#include<stdlib.h>
#include<stdio.h>
int i, j, k;
7
int n1 = m - l + 1;
int n2 = r - m;
i = 0;
j = 0;
k = l;
arr[k] = L[i];
i++;
else
arr[k] = R[j];
j++;
k++;
arr[k] = L[i];
i++;
k++;
8
{
arr[k] = R[j];
j++;
k++;
if (l < r)
int m = l+(r-l)/2;
mergeSort(arr, l, m);
merge(arr, l, m, r);
int i;
printf("\n");
int main()
printArray(arr, arr_size);
9
mergeSort(arr, 0, arr_size - 1);
printArray(arr, arr_size);
return 0;
OUTPUT
8, 5, 1, 4, 7, 9
1, 4, 5, 7, 8, 9
4. Implement a program in C to find the maximum and minimum element from an array of integers
using Divide and Conquer approach
ALGORITHM
Algorithm MaxMinDC(x, y)
if x – y ≤ 1 then
else
CODE
#include<stdio.h>
#include<stdio.h>
int a[100];
10
void maxmin(int i, int j)
if(i==j)
else
if(i == j-1)
if(a[i] <a[j])
max = a[j];
min = a[i];
else
max = a[i];
min = a[j];
else
mid = (i+j)/2;
maxmin(i, mid);
maxmin(mid+1, j);
if(max <max1)
max = max1;
11
min = min1;
int main ()
int i, num;
scanf ("%d",&num);
for (i=1;i<=num;i++)
scanf ("%d",&a[i]);
max = a[0];
min = a[0];
maxmin(1, num);
return 0;
OUTPUT
24 20 33 15 36
ALGORITHM
12
for i = 1 to n
do x[i] = 0
weight = 0
for i = 1 to n
x[i] = 1
else
weight = W
break
return x
CODE
# include<stdio.h>
float x[20], tp = 0;
int i, j, u;
u = capacity;
x[i] = 0.0;
if (weight[i] > u)
break;
else {
x[i] = 1.0;
tp = tp + profit[i];
u = u - weight[i];
if (i < n)
13
x[i] = u / weight[i];
tp = tp + (x[i] * profit[i]);
printf("%f\t", x[i]);
int main() {
int num, i, j;
scanf("%d", &num);
scanf("%f", &capacity);
temp = ratio[j];
ratio[j] = ratio[i];
ratio[i] = temp;
temp = weight[j];
weight[j] = weight[i];
weight[i] = temp;
14
temp = profit[j];
profit[j] = profit[i];
profit[i] = temp;
return(0);
OUTPUT
2 10
3 5
5 15
7 7
1 6
4 18
1 3
ALGORITHM
Dynamic-0-1-Knapsack (v, w, n, W)
for w = 0 to W do
15
c[0, w] = 0
for i = 1 to n do
c[i, 0] = 0
for w = 1 to W do
if wi ≤ w then
else
c[i, w] = c[i-1, w]
CODE
#include<stdio.h>
int i, w;
int K[n+1][W+1];
if (i==0 || w==0)
K[i][w] = 0;
else
K[i][w] = K[i-1][w];
16
return K[n][W];
int main()
int W = 50;
int n = sizeof(val)/sizeof(val[0]);
return 0;
OUTPUT
220
7. Implement a program in C to solve the job sequencing with deadline problem using Greedy Method
ALGORITHM
D(0) := J(0) := 0
k := 1
J(1) := 1
for i = 2 … n do
r := k
r := r – 1
for l = k … r + 1 by -1 do
J(l + 1) := J(l)
17
J(r + 1) := i
k := k + 1
CODE
#include <stdio.h>
struct Job {
char id[5];
int deadline;
int profit;
};
return y;
int main(void) {
int i, j;
Job jobs[5] = {
{"j1", 2, 60},
{"j2", 1, 100},
{"j3", 3, 20},
{"j4", 2, 40},
{"j5", 1, 20},
};
Job temp;
int n = 5;
18
temp = jobs[j+1];
jobs[j+1] = jobs[j];
jobs[j] = temp;
jobSequencingWithDeadline(jobs, n);
return 0;
int i, j, k, maxprofit;
int timeslot[MAX];
int filledTimeSlot = 0;
int dmax = 0;
dmax = jobs[i].deadline;
timeslot[i] = -1;
while(k >= 1) {
if(timeslot[k] == -1) {
19
timeslot[k] = i-1;
filledTimeSlot++;
break;
k--;
if(filledTimeSlot == dmax) {
break;
printf("%s", jobs[timeslot[i]].id);
maxprofit = 0;
maxprofit += jobs[timeslot[i]].profit;
OUTPUT
c a e
20
ALGORITHM
Algorithm Place(k,i)
return true
Algorithm NQueens(k,n)
for i:=1 to n do
if Place(k,i) then
x[k] := I;
else NQueens(k+1,n);
CODE
#include<stdio.h>
#include<math.h>
int board[20],count;
int main()
int n,i,j;
21
scanf("%d",&n);
queen(1,n);
return 0;
void print(int n)
int i,j;
printf("\n\nSolution %d:\n\n",++count);
for(i=1;i<=n;++i)
printf("\t%d",i);
for(i=1;i<=n;++i)
printf("\n\n%d",i);
for(j=1;j<=n;++j)
if(board[i]==j)
printf("\tQ");
else
printf("\t-");
int i;
for(i=1;i<=row-1;++i)
if(board[i]==column)
return 0;
else
if(abs(board[i]-column)==abs(i-row))
22
return 0;
return 1;
int column;
for(column=1;column<=n;++column)
if(place(row,column))
board[row]=column;
if(row==n)
print(n);
else
queen(row+1,n);
OUTPUT
Solution 1:
1 2 3 4
1 - Q - -
2 - - - Q
3 Q - - -
4 - - Q -
Solution 2:
1 2 3 4
23
1 - - Q -
2 Q - - -
3 - - - Q
4 - Q - -
ALGORITHM
Algorithm mColoring(k)
repeat
NextValue(k);
if (k = n) then
write (x[1:n]);
else mColoring(k+1);
} until (false);
Algorithm NextValue(k)
repeat
for j=1 to n do
then break;
24
} until (false);
CODE
#include<stdio.h>
#define V 4
return false;
return true;
if (v == V)
return true;
color[v] = c;
return true;
color[v] = 0;
return false;
25
{
color[i] = 0;
return false;
printSolution(color);
return true;
printf("Solution Exists:"
printf("\n");
int main()
{1, 0, 1, 0},
{1, 1, 0, 1},
{1, 0, 1, 0},
};
int m = 3;
return 0;
26
OUTPUT
1 2 3 2
10. Implement a program in C to find the Hamiltonian Cycle from a graph using backtracking
ALGORITHM
repeat
NextValue(k);
} until (false);
Algorithm NextValue(k)
repeat
if (G[x[k-1],x[k]] ≠ 0) then
if (j=k) then
then return;
27
} until (false);
CODE
#include<stdio.h>
#define V 5
if (graph [ path[pos-1] ][ v ] == 0)
return false;
if (path[i] == v)
return false;
return true;
if (pos == V)
return true;
else
return false;
path[pos] = v;
28
return true;
path[pos] = -1;
return false;
path[i] = -1;
path[0] = 0;
return false;
printSolution(path);
return true;
printf("\n");
int main()
29
{
{1, 0, 1, 1, 1},
{0, 1, 0, 0, 1},
{1, 1, 0, 0, 1},
{0, 1, 1, 1, 0},
};
hamCycle(graph1);
{1, 0, 1, 1, 1},
{0, 1, 0, 0, 1},
{1, 1, 0, 0, 0},
{0, 1, 1, 0, 0},
};
hamCycle(graph2);
return 0;
OUTPUT
0 1 2 4 3 0
11. Implement a program in C to find the order of matrix chain multiplication with minimum cost using
dynamic programming
ALGORITHM
Algorithm MCM(C)
m[i][i] = 0;
30
x=2;
j=x;
repeat while (j ≤ n)
m[i][j] = ∞
x= x + 1;
x = 2;
repeat while (x ≤ n)
i = 1;
j = x;
repeat while (i ≤ n)
if (j ≤ n)
S[i][j]=k;
j=j+1;
CODE
#include<stdio.h>
#include<stdlib.h>
31
int minimum_cost(int matrix[20], int t)
int x, small;
if(t == 1)
return matrix[0];
else
small = matrix[0];
small = matrix[x];
return small;
int main()
int t, i, l, j, k, limit;
scanf("%d", &limit);
scanf("%d", &columns[i]);
32
scanf("%d", &rows[i]);
temp[i] = columns[i];
printf("\n");
multiplier[i][j] = 0;
t = 0;
return 0;
33
OUTPUT
12. Implement a program in C to find the minimum cost spanning tree using Prim’s algorithm
ALGORITHM
CODE
#include<stdio.h>
#include<stdlib.h>
#define MAX 20
int G[MAX][MAX],spanning[MAX][MAX],n;
int prims();
int main()
int i,j,total_cost;
scanf("%d",&n);
34
printf("\nEnter the adjacency matrix:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&G[i][j]);
total_cost=prims();
for(i=0;i<n;i++)
printf("\n");
for(j=0;j<n;j++)
printf("%d\t",spanning[i][j]);
return 0;
int prims()
int cost[MAX][MAX];
int u,v,min_distance,distance[MAX],from[MAX];
int visited[MAX],no_of_edges,i,min_cost,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(G[i][j]==0)
cost[i][j]=infinity;
else
cost[i][j]=G[i][j];
spanning[i][j]=0;
distance[0]=0;
visited[0]=1;
35
for(i=1;i<n;i++)
distance[i]=cost[0][i];
from[i]=0;
visited[i]=0;
min_cost=0;
no_of_edges=n-1;
while(no_of_edges>0)
min_distance=infinity;
for(i=1;i<n;i++)
if(visited[i]==0&&distance[i]<min_distance)
v=i;
min_distance=distance[i];
u=from[v];
spanning[u][v]=distance[v];
spanning[v][u]=distance[v];
no_of_edges--;
visited[v]=1;
for(i=1;i<n;i++)
if(visited[i]==0&&cost[i][v]<distance[i])
distance[i]=cost[i][v];
from[i]=v;
min_cost=min_cost+cost[u][v];
36
return(min_cost);
OUTPUT
5 7 9
4 0 4
12 1 6
13. Implement a program in C to find minimum cost spanning tree using Kruskal’s algorithm
ALGORITHM
CODE
#include<stdio.h>
#define MAX 30
int u,v,w;
}edge;
edge data[MAX];
int n;
37
}edgelist;
edgelist elist;
int G[MAX][MAX],n;
edgelist spanlist;
void kruskal();
void sort();
void print();
void main()
int i,j,total_cost;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&G[i][j]);
kruskal();
print();
void kruskal()
int belongs[MAX],i,j,cno1,cno2;
elist.n=0;
for(i=1;i<n;i++)
for(j=0;j<i;j++)
if(G[i][j]!=0)
38
elist.data[elist.n].u=i;
elist.data[elist.n].v=j;
elist.data[elist.n].w=G[i][j];
elist.n++;
sort();
for(i=0;i<n;i++)
belongs[i]=i;
spanlist.n=0;
for(i=0;i<elist.n;i++)
cno1=find(belongs,elist.data[i].u);
cno2=find(belongs,elist.data[i].v);
if(cno1!=cno2)
spanlist.data[spanlist.n]=elist.data[i];
spanlist.n=spanlist.n+1;
union1(belongs,cno1,cno2);
return(belongs[vertexno]);
int i;
for(i=0;i<n;i++)
if(belongs[i]==c2)
39
belongs[i]=c1;
void sort()
int i,j;
edge temp;
for(i=1;i<elist.n;i++)
for(j=0;j<elist.n-1;j++)
if(elist.data[j].w>elist.data[j+1].w)
temp=elist.data[j];
elist.data[j]=elist.data[j+1];
elist.data[j+1]=temp;
void print()
int i,cost=0;
for(i=0;i<spanlist.n;i++)
printf("\n%d\t%d\t%d",spanlist.data[i].u,spanlist.data[i].v,spanlist.data[i].w);
cost=cost+spanlist.data[i].w;
OUTPUT
1001
1110
40
1010
1011
1 0 1
2 0 1
3 0 1
14. Implement a program in C to find the all pairs shortest path using Floyd’s Algorithm
ALGORITHM
Algorithm Floyd(D, P)
for k in 1 to n do
for i in 1 to n do
for j in 1 to n do
P[i][j] = P[k][j]
return P
CODE
#include<stdio.h>
#define V 4
int dist[V][V], i, j, k;
dist[i][j] = graph[i][j];
41
{
printSolution(dist);
if (dist[i][j] == INF)
printf("%7s", "INF");
else
printf("\n");
int main()
42
{INF, 0, 3, INF},
};
floydWarshall(graph);
return 0;
OUTPUT
Following matrix shows the shortest distances between every pair of vertices
0 5 8 9
INF 0 3 4
INF INF 0 1
15. Implement a program in C to find the BFS traversal sequence from a given graph
ALGORITHM
for i=1 to n do
visited[i] = 0;
for i=1 to n do
CODE
#include<stdio.h>
void bfs(int v) {
43
if(a[v][i] && !visited[i])
q[++r] = i;
if(f <= r) {
visited[q[f]] = 1;
bfs(q[f++]);
void main() {
int v;
scanf("%d", &n);
q[i] = 0;
visited[i] = 0;
for(j=1;j<=n;j++) {
scanf("%d", &a[i][j]);
scanf("%d", &v);
bfs(v);
if(visited[i])
printf("%d\t", i);
else {
break;
44
}
OUTPUT
0 1 1
0 1 0
1 0 0
1 2 3
ALGORITHM
Algorithm DFS(v)
visited [v] = 1;
CODE
#include<stdio.h>
#include<conio.h>
int a[20][20],reach[20],n;
void dfs(int v)
45
{
int i;
reach[v]=1;
for(i=1;i<=n;i++)
printf("\n %d->%d",v,i);
dfs(i);
void main()
int i,j,count=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
reach[i]=0;
for(j=1;j<=n;j++)
a[i][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
dfs(1);
printf("n");
for(i=1;i<=n;i++)
if(reach[i])
count++;
46
}
if(count==n)
else
OUTPUT
1 1 0
0 0 1
1 0 1
1->2
2->3
Graph is connected
17. Implement a program in C to solve 15-puzzle problem using Branch and Bound Technique
CODE
#include<stdio.h>
#include<conio.h>
int m=0,n=4;
int i,j,m=0;
if(temp[i][j]!=t[i][j])
m++;
47
}
return m;
int i,j,f=1;
if(a[i][j]!=t[i][j])
f=0;
return f;
void main()
int p,i,j,n=4,a[10][10],t[10][10],temp[10][10],r[10][10];
int m=0,x=0,y=0,d=1000,dmin=0,l=0;
scanf("%d",&a[i][j]);
scanf("%d",&t[i][j]);
printf("%d\t",a[i][j]);
printf("\n");
48
printf("\nTarget Matrix is :\n");
printf("%d\t",t[i][j]);
printf("\n");
while(!(check(a,t)))
l++;
d=1000;
if(a[i][j]==0)
x=i;
y=j;
temp[i][j]=a[i][j];
if(x!=0)
p=temp[x][y];
temp[x][y]=temp[x-1][y];
temp[x-1][y]=p;
m=cal(temp,t);
dmin=l+m;
49
if(dmin < d)
d=dmin;
r[i][j]=temp[i][j];
temp[i][j]=a[i][j];
if(x!=n-1)
p=temp[x][y];
temp[x][y]=temp[x+1][y];
temp[x+1][y]=p;
m=cal(temp,t);
dmin=l+m;
if(dmin < d)
d=dmin;
r[i][j]=temp[i][j];
temp[i][j]=a[i][j];
if(y!=n-1)
p=temp[x][y];
50
temp[x][y]=temp[x][y+1];
temp[x][y+1]=p;
m=cal(temp,t);
dmin=l+m;
if(dmin < d)
d=dmin;
r[i][j]=temp[i][j];
temp[i][j]=a[i][j];
if(y!=0)
p=temp[x][y];
temp[x][y]=temp[x][y-1];
temp[x][y-1]=p;
m=cal(temp,t);
dmin=l+m;
if(dmin < d)
d=dmin;
r[i][j]=temp[i][j];
51
for(i=0;i < n;i++)
printf("%d\t",r[i][j]);
printf("\n");
a[i][j]=r[i][j];
temp[i][j]=0;
getch();
OUTPUT
1 2 3 4
5 6 0 8
9 10 7 11
13 14 15 12
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 0
Entered Matrix is :
1 2 3 4
5 6 0 8
52
9 10 7 11
13 14 15 12
Target Matrix is :
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 0
1 2 3 4
5 6 7 8
9 10 0 11
13 14 15 12
Minimum cost : 4
1 2 3 4
5 6 7 8
9 10 11 0
13 14 15 12
Minimum cost : 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 0
Minimum cost : 3
53