Ada lab notes
Ada lab notes
Design a program to search a key element of n integers using binary search algorithm and
compute time complexity
#include<stdio.h>
int main()
{
int c, first, last, middle, n, search, array[100];
printf("Enter number of elements\n");
scanf("%d",&n);
printf("Enter %d integers\n", n);
for ( c = 0 ; c < n ; c++ )
scanf("%d",&array[c]);
printf("Enter value to find\n");
scanf("%d",&search);
first = 0;
last = n - 1;
middle = (first+last)/2;
while( first <= last )
{
if ( array[middle] < search )
first = middle + 1;
else if ( array[middle] == search )
{
printf("%d found at location %d.\n", search, middle+1);
break;
}
else
last = middle - 1;
middle = (first + last)/2;
}
if ( first > last )
printf("Not found! %d is not present in the list.\n", search);
return 0;
}
OUTPUT:
Enter number of elements
5
Enter 5 integers
3
22
5
77
1
Enter value to find
77
77 found at location 4.
2. Design a program to Sort a given set of n integer elements using Quick Sort method and
compute its time complexity.
#include <stdio.h>
temp = list[pivot];
list[pivot] = list[j];
list[j] = temp;
quickSort(list,first,j-1);
quickSort(list,j+1,last);
}
}
void main(){
int list[20],size,i;
OUTPUT:
Enter size of the list: 5
Enter 5 integer values: 34
6
22
7
12
List after sorting is: 6 7 12 22 34
3) Design a program to sort set of n integer elements using Merge Sort method and compute its time
complexity.
#include <stdio.h>
int main() {
int a[100], aux[100], n, i, d, swap;
merge_sort(0, n - 1, a, aux);
return 0;
}
OutPut:
a)
#include<stdio.h>
int max(int a, int b) { return (a > b)? a : b; }
int knapSack(int W, int wt[], int val[], int n)
{
int i, w;
int K[n+1][W+1];
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];
}
int main()
{
int i, n, val[20], wt[20], W;
OutPut:
Enter number of items:3
Enter value and weight of items:
100 2
50 10
150 30
Enter size of knapsack:250
300
b)
# include<stdio.h>
if (i < n)
x[i] = u / weight[i];
tp = tp + (x[i] * profit[i]);
}
int main() {
float weight[20], profit[20], capacity;
int num, i, j;
float ratio[20], temp;
temp = weight[j];
weight[j] = weight[i];
weight[i] = temp;
temp = profit[j];
profit[j] = profit[i];
profit[i] = temp;
}
}
}
OutPut:
5) Design a program to print all the node reachable from a given starting node in a given digraph
using DFS method.
#include<stdio.h>
#include<stdlib.h>
void dfs(int v)
int i;
visited[v]=1;
s[++top] = v;
for(i=1;i<=n;i++)
dfs(i);
}
}
int main()
scanf("%d",&n);
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=n;i++)
visited[i]=0;
scanf("%d",&start);
dfs(start);
0101
0010
0001
0000
34
4) A)
#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];
return K[n][W];
}
int main()
scanf("%d", &n);
scanf("%d", &W);
return 0;
# 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)
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;
temp = profit[j];
profit[j] = profit[i];
profit[i] = temp;
return(0);
Output :
2 10
35
5 15
77
16
4 18
13
10
11
12
13
14
15
16
17
2 10
35
5 15
77
16
4 18
13
Part B
1) Write a Program find shortest paths to other vertices using Dijkstra's algorithm.
#include<stdio.h>
int main()
{
int cost[10][10],i,j,n,source,target,visited[10]={0},min=999,dist[10],pre[10];
int start,m,d,path[10];
scanf("%d",&n);
// Input graph
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&cost[i][j]);
if(cost[i][j]==0)
cost[i][j]=999;
scanf("%d",&source);
scanf("%d",&target);
start=source;
for(i=1;i<=n;i++)
{
dist[i]=999; // here we initialize all distances with the maximum value (999) you take any
other value also
while(visited[target]==0)
min=999;
m=0;
for(i=1;i<=n;i++)
dist[i]=d;
pre[i]=start;
min=dist[i];
m=i;
start=m;
visited[m]=1;
}
start=target;
j=0;
while(start!=-1)
path[j++]=start;
start=pre[start];
for(i=j-1;i>=0;i--)
if(i!=j-1)
printf(" to ");
printf("%d",path[i]);
return 0;
0 10 30 100
10 0 10 90
30 10 0 30
100 90 30 0
1 to 2 to 3 to 4
shortest path is 50
2. a. Write a program to find a Minimum Cost Spanning Tree of a given connected undirected
graph using Kruskal's algorithm.
#include<stdio.h>
#include<stdlib.h>
int i,j,k,a,b,u,v,n,ne=1;
int min,mincost=0,cost[9][9],parent[9];
int find(int);
int uni(int,int);
void main()
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&cost[i][j]);
if(cost[i][j]==0)
cost[i][j]=999;
}
while(ne < n)
for(i=1,min=999;i<=n;i++)
min=cost[i][j];
a=u=i;
b=v=j;
u=find(u);
v=find(v);
if(uni(u,v))
mincost +=min;
cost[a][b]=cost[b][a]=999;
}
printf("\n\tMinimum cost = %d\n",mincost);
int find(int i)
while(parent[i])
i=parent[i];
return i;
if(i!=j)
parent[j]=i;
return 1;
return 0;
OUTPUT:
Implementation of Kruskal's algorithm
031600
305030
150564
605002
036006
004260
1 edge (1,3) =1
2 edge (4,6) =2
3 edge (1,2) =3
4 edge (2,5) =3
5 edge (3,6) =4
Minimum cost = 13
b ) Write a program to find Minimum Cost Spanning Tree of a given connected undirected
graph using Prim's algorithm.
#include<stdio.h>
int a,b,u,v,n,i,j,ne=1;
int visited[10]={0},min,mincost=0,cost[10][10];
void main()
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&cost[i][j]);
if(cost[i][j]==0)
cost[i][j]=999;
visited[1]=1;
printf("\n");
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;
b=v=j;
if(visited[u]==0 || visited[v]==0)
mincost+=min;
visited[b]=1;
cost[a][b]=cost[b][a]=999;
OUTPUT:
02060
20385
03007
68009
05790
#include<stdio.h>
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(a[i][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
printf("%d ",a[i][j]);
printf("\n");
int main()
int cost[4][4] = {{0, 3, 999, 4}, {8, 0, 2, 999}, {5, 999, 0, 1}, {2, 999, 999, 0}};
int n = 4;
floyd(cost,n);
OUTPUT:
0356
5023
3601
2570
3. B. Implement transitive closure using Warshall Algorithm.
#include<stdio.h>
#include<math.h>
int max(int, int);
void warshal(int p[10][10], int n) {
int i, j, k;
for (k = 1; k <= n; k++)
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
p[i][j] = max(p[i][j], p[i][k] && p[k][j]);
}
int max(int a, int b) {
;
if (a > b)
return (a);
else
return (b);
}
void main() {
int p[10][10] = { 0 }, n, e, u, v, i, j;
printf("\n Enter the number of vertices:");
scanf("%d", &n);
printf("\n Enter the number of edges:");
scanf("%d", &e);
for (i = 1; i <= e; i++) {
//printf("\n Enter the end vertices of edge %d:", i);
scanf("%d%d", &u, &v);
p[u][v] = 1;
}
printf("\n Matrix of input data: \n");
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++)
printf("%d\t", p[i][j]);
printf("\n");
}
warshal(p, n);
printf("\n Transitive closure: \n");
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++)
printf("%d\t", p[i][j]);
printf("\n");
}
OUTPUT:
1 0 0 1 0
0 0 0 0 0
0 1 1 1 0
0 1 0 1 0
0 1 1 1 1
Transitive closure:
1 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 1 0 1 0
0 1 1 1 1
4. Design and implement to find a subset of a given set.
#include <stdio.h>
char string[50], n;
int main()
int i, len;
scanf("%d", &len);
scanf("%s", string);
n = len;
subset(0, 0, i);
{
int i, j;
if (num_sub == 1)
printf("%c\n", string[i]);
else
printf("%c", string[i]);
printf("%c\n", string[j]);
if (start != n - num_sub)
else
}
OUTPUT:
Pr
Po
Pg
Pr
Pa
Pm
Pm
Pi
Pn
Pg
ro
rg
rr
ra
rm
rm
ri
rn
rg
og
or
oa
om
om
oi
on
og
gr
ga
gm
gm
gi
gn
gg
ra
rm
rm
ri
rn
rg
am
am
ai
an
ag
mm
mi
mn
mg
mi
mn
mg
in
ig
ng
Pro
Prg
Prr
Pra
Prm
Prm
Pri
Prn
Prg
rog
ror
roa
rom
rom
roi
ron
rog
ogr
oga
ogm
ogm
ogi
ogn
ogg
gra
grm
grm
gri
grn
grg
ram
ram
rai
ran
rag
amm
ami
amn
amg
mmi
mmn
mmg
min
mig
ing
Prog
Pror
Proa
Prom
Prom
Proi
Pron
Prog
rogr
roga
rogm
rogm
rogi
rogn
rogg
ogra
ogrm
ogrm
ogri
ogrn
ogrg
gram
gram
grai
gran
grag
ramm
rami
ramn
ramg
ammi
ammn
ammg
mmin
mmig
ming
Progr
Proga
Progm
Progm
Progi
Progn
Progg
rogra
rogrm
rogrm
rogri
rogrn
rogrg
ogram
ogram
ograi
ogran
ograg
gramm
grami
gramn
gramg
rammi
rammn
rammg
ammin
ammig
mming
Progra
Progrm
Progrm
Progri
Progrn
Progrg
rogram
rogram
rograi
rogran
rograg
ogramm
ogrami
ogramn
ogramg
grammi
grammn
grammg
rammin
rammig
amming
Program
Program
Prograi
Progran
Prograg
rogramm
rogrami
rogramn
rogramg
ogrammi
ogrammn
ogrammg
grammin
grammig
ramming
Programm
Programi
Programn
Programg
rogrammi
rogrammn
rogrammg
ogrammin
ogrammig
gramming
Programmi
Programmn
Programmg
rogrammin
rogrammig
ogramming
Programmin
Programmig
rogramming
Programming
#include <stdio.h>
int tsp(int c)
temp = matrix[c][count];
nearest_city = count;
}
}
if(minimum != 999)
return nearest_city;
int nearest_city;
visited_cities[city] = 1;
nearest_city = tsp(city);
if(nearest_city == 999)
nearest_city = 0;
return;
minimum_cost(nearest_city);
int main()
int i, j;
printf("Enter Total Number of Cities:\t");
scanf("%d", &limit);
scanf("%d", &matrix[i][j]);
visited_cities[i] = 0;
printf("\n");
printf("\n\nPath:\t");
minimum_cost(0);
printf("%d\n", cost);
return 0;
}
OUTPUT:
1234
5678
3456
9843
1234
5678
3456
9843
Path: 1 4 3 2 1
Minimum Cost: 17