You are on page 1of 62

LINEAR SEARCH

Ex. No. 1 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//linear search #include
<stdio.h>
int lsearch(int [], int, int); int main()
{
printf("\n\tLINEAR SEARCH"); int
n;
printf("\nEnter the size : ");
scanf("%d",&n);
int A[n],i;
printf("\nEnter the elements : ");
for(i = 0 ; i<n ; i++) scanf("%d",&A[i]); int
x;
printf("\nEnter the element to be searched : "); scanf("%d",&x);
int res = lsearch(A,n,x); if(res ==
-1)
printf("\n\nElement not found!"); else
printf("\n\nElement found at position %d",res); if(res == 1)
printf("\n\nBest case : O(1)"); else if(res >
1 && res < n)
printf("\n\nAverage case : O(n)"); else
printf("\n\nWorst case : O(n)");
}
int lsearch(int A[], int n, int x)
{
int i;
for(i = 0 ; i<n ; i++) {
if(A[i] == x) { return
(i+1); break;
}
}
return -1;
}

OUTPUT:

RESULT:
KNAPSACK PROBLEM
(BRUTEFORCE)
Ex. No. 2 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//knapsack using bruteforce approach #include
<stdio.h>
int max(int a, int b)
{
return ((a > b)? a : b);
}

int KnapSack(int W, int wt[], int val[], int n)


{
if (n == 0 || W == 0) return
0;
if(wt[n-1] > W)
return KnapSack(W, wt, val, n-1); else
return max(val[n-1] + KnapSack(W - wt[n-1], wt, val, n-1), KnapSack(W, wt,
val, n-1));
}

int main()
{
printf("\n\tKNAPSACK USING BRUTE FORCE APPROACH\n");
int val[] = {60, 100, 120};
int wt[] = {10, 20, 30};
int W = 50;
int n = sizeof(val) / sizeof(val[0]); printf("\nValue\
tWeight\n");
for(int i = 0 ; i<n ; i++) printf("%d\t%d\n", val[i],
wt[i]);
printf("\nKnapSack Capacity, W = %d", W); printf("\n\nResult = %d",
KnapSack(W, wt, val, n));
}
OUTPUT:

RESULT:
BINARY SEARCH
Ex. No. 3 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//binary search #include
<stdio.h>
int Bsearch(int A[], int n, int x)
{ int f = 0, l = n-1, m, pos; while(f <=
l) {
m = (f + l) / 2; if
(A[m] == x)
return (m + 1); else
if (A[m] < x)
f = m + 1;
else
l = m - 1;
}
}
int main()
{
printf("\n\tBINARY SEARCH\n"); int n;
printf("\nEnter the size : ");
scanf("%d",&n);
int A[n], i, x;
printf("\nEnter the elements : ");
for(i = 0 ; i<n ; i++) scanf("%d",&A[i]); printf("\
nEnter the element to be searched : "); scanf("%d",&x);
int res = Bsearch(A,n,x); if(res ==
-1)
printf("\n\nElement not found!"); else
printf("\n\nElement found at position %d",res);
}
OUTPUT:

RESULT:
QUICK SORT
Ex. No. 4 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//sorting the elements of an array using quicksort technique #include <stdio.h>
int partition(int [],int,int); void swap(int
*,int *);
void quickSort(int [],int,int); void
display(int [],int);
int main()
{
printf("\n\tQUICK SORT\n"); int n;
printf("\nEnter the size : ");
scanf("%d",&n);
int A[n],x;
printf("\nEnter the array elements : "); for(x=0;x<n;x+
+)
scanf("%d",&A[x]); int
i,j;
i = 0;
j = n-1;
quickSort(A,i,j);
printf("\nSorted array : ");
display(A,n);
}
void quickSort(int A[],int i,int j)
{
if(i < j)
{
int p = partition(A,i,j);
quickSort(A,i,p-1);
quickSort(A,p+1,j);
}
}
int partition(int A[],int i,int j)
{
int start, end, pivot; start = i;
end = j; pivot =
A[i];
while(start<end)
{
while(pivot >= A[start]) start++;
while(pivot < A[end]) end--;
if(start<end)
swap(&A[start],&A[end]);
}
swap(&A[i],&A[end]);
return(end);
}
void swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void display(int A[],int n)
{
int x; for(x=0;x<n;x+
+)
printf("%d ",A[x]);
}
OUTPUT:

RESULT:
MERGE SORT
Ex. No. 5 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//merge sort #include
<stdio.h>
void mergeSort(int A[], int l, int r)
{
if (l<r) {
int m = (l + r) / 2;
mergeSort(A, l, m);
mergeSort(A, m+1, r);
merge(A, l, m, r);
}
}
void merge(int A[], int l, int m, int r)
{
int n1 = m - l + 1; int n2 =
r - m;
int L[n1], R[n2]; //temporary arrays int i,
j;
for(i = 0 ; i<n1 ; i++) L[i] = A[l + i]; for(j = 0 ;
j<n2 ; j++) R[j] = A[m + 1 + j]; i = 0;
j = 0;
int k = l;
while (i<n1 && j<n2) {
if (L[i] <= R[j]) {
A[k] = L[i]; i+
+;
}
else {
A[k] = R[j]; j+
+;
}
k++;
}
while (i<n1) { A[k] =
L[i]; i++;
k++;
}
while (j<n2) { A[k] =
R[j]; j++;
k++;
}
}
void display(int A[], int n)
{ int x;
for(x=0;x<n;x++)
printf("%d\t",A[x]);
}
int main()
{
printf("\n\tMERGE SORT\n"); int n;
printf("\nEnter the size : ");
scanf("%d",&n);
int A[n],x;
printf("\nEnter the array elements :\n"); for(x=0;x<n;x+
+)
scanf("%d",&A[x]);
mergeSort(A, 0, n-1); printf("\n\nSorted
array :\n"); display(A,n);
}
OUTPUT:

RESULT:
KNAPSACK (DYNAMIC PROGRAMMING)
Ex. No. 6 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//knapsack using dynamic programming #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, j;
int K[n+1][W+1];
for(i = 0 ; i <= n ; i++){ for(j = 0 ; j <= W
; j++){
if (i == 0 || j == 0) K[i][j] =
0;
else if (wt[i-1] <= j)
K[i][j] = max(val[i-1] + K[i-1][j-wt[i-1]] ,
K[i-1][j]);
else
K[i][j] = K[i-1][j];

}
}
return(K[n][W]);
}
int main()
{
printf("\n\tKNAPSACK USING DYNAMIC PROGRAMMING\n");
int val[] = {60, 100, 120};
int wt[] = {10, 20, 30};
int W = 50, n = sizeof(val)/sizeof(val[0]); printf("\nValues\
tWeights\n");
for(int i = 0 ; i<n ; i++) printf("%d\t%d\n",val[i],wt[i]); printf("\nInitial KnapSack
capacity = %d",W); printf("\n\nResult = %d\n",knapSack(W, wt, val, n));
return 0;
}
OUTPUT:

RESULT:
TRIBONACCI SEQUENCE (DYNAMIC
PROGRAMMING)
Ex. No. 7 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//tribonacci sequence

#include <stdio.h> int


main()
{
int n;
printf("\n\tTRIBONACCI SEQUENCE"); int
test;
printf("\n\nEnter the no. of test cases : "); scanf("%d",&test);
for(int x = 0 ; x<test ; x++)
{
printf("\nTest case %d" , x+1);
printf("\n\nEnter the position of the element : "); scanf("%d",&n);
int A[n],i;
A[0] = 0;
A[1] = 1;
A[2] = 1;
for(i = 3 ; i<n ; i++)
{
A[i] = A[i-1] + A[i-2] + A[i-3] ;
}
printf("\n");
for(i = 0 ; i<n ; i++) printf("%d
",A[i]);
printf("\n");
}
}
OUTPUT:

RESULT:
REMOVING CHOCOLATES (DYNAMIC PROGRAMMING)
Ex. No. 8 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//removing chocolates

#include <stdio.h> int


choco(int);

int main()
{
printf("\n\tREMOVING CHOCOLATES\n\n"); int
n;
printf("\nEnter the no. of chocolates : "); scanf("%d",&n);
printf("\nResult = %d",choco(n)); return 0;
}

int choco(int n)
{
if((n == 1) || (n == 2)) return 1;
if(n == 3)
return 2;
else

return (choco(n-1) + choco(n-3));


}
OUTPUT:

RESULT:
APPLES IN THE BASKET
Ex. No. 9 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//apples in the basket #include
<stdio.h>
int result(int [], int); int main()
{
printf("\n\tAPPLES IN THE BASKET\n"); int n;
printf("\nEnter n : ");
scanf("%d", &n);
int A[n], i;
printf("\nEnter weight of each apple : "); for(i = 0 ; i<n ; i++)
scanf("%d", &A[i]);
printf("\nResult = %d", result(A,n));
return 0;
}
int result(int A[], int n)
{ int temp, i, j, x = 0, sum = 0; for(i = 0 ;
i<n ; i++) {
for(j = i+1 ; j<n ; j++) { if(A[j] >
A[j+1]) {
temp = A[j]; A[j] =
A[j+1];
A[j+1] = temp; }
}
}
while(sum <= 5000) { sum =
sum + A[x]; x++;
}
return (x);
}
OUTPUT:

RESULT:
COIN DENOMINATION
Ex. No. 10 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//coin denomination
#include <stdio.h>
int denomination(int [], int, int); int main()
{
printf("\n\tCOIN DENOMINATION\n");
int A[] = {1, 2, 5, 10, 20, 50, 100, 200, 500, 2000};
int n = sizeof(A)/sizeof(A[0]), x, test; printf("\nEnter the no. of
test cases : "); scanf("%d", &test);
for(int j = 0 ; j<32 ; j++) printf("-"); for(int
j = 0 ; j<test ; j++) {
printf("\nTest case %d", j+1); printf("\n\
nEnter x : "); scanf("%d", &x);
printf("\nResult = %d\n", denomination(A, n, x)); for(int i = 0 ; i<13 ; i+
+) printf("-");
}
return 0;
}
int denomination(int A[], int n, int x)
{ int i, d = 0;
for(i = n-1 ; i>=0 ; i--) { if(x >= A[i]) {
d = d + (x / A[i]);
x = x % A[i]; }
}
return (d);
}
OUTPUT:

RESULT:
GAS-STATION PROBLEM
Ex. No. 11 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//gas station problem

#include <stdio.h> int


main()
{
printf("\n\tGAS STATION PROBLEM\n"); int
n, i;
printf("\nEnter n : ");
scanf("%d", &n);
int gas[n], cost[n]; printf("\nEnter the GAS
values : "); for(i = 0 ; i<n ; i++)
scanf("%d", &gas[i]); printf("Enter the
cost values : "); for(i = 0 ; i<n ; i++)
scanf("%d", &cost[i]);

int tt = 0, ct = 0, sp = 0; for(i = 0 ;
i<n ; i++) {
tt = tt + gas[i] - cost[i]; ct = ct +
gas[i] - cost[i]; if (ct < 0) {
sp = i + 1; ct =
0;
}
}
if (tt >= 0)
printf("\nResult = %d", sp);
else

printf("\nResult = -1");
}
OUTPUT:

RESULT:
N-QUEEN’S PROBLEM
Ex. No. 12 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//nqueens problem
#include<stdio.h> int
N;
int board[100][100];
int isAttack(int i, int j)
{
int k, l;
for(k = 0 ; k<N ; k++) {
if((board[i][k] == 1) || (board[k][j] == 1)) return 1;
}
for(k = 0 ; k<N ; k++) { for(l = 0 ; l<N
; l++) {
if(((k + l) == (i + j)) || ((k - l) == (i - j))) { if(board[k][l] == 1)
return 1;
}
}
}
return 0;
}
int nqueen(int n)
{
int i, j; if(n == 0)
return 1;
for(i = 0 ; i<N ; i++) { for(j = 0 ; j<N ;
j++) {
if((!isAttack(i,j)) && (board[i][j] != 1)) { board[i][j] = 1;
if(nqueen(n-1) == 1)
return 1;
board[i][j] = 0;
}
}
}
return 0;
}
int main()
{
printf("\n\n\tN-QUEEN'S PROBLEM\n"); int i,
j;
printf("\nEnter N : ");
scanf("%d",&N);
printf("\n%d x %d BOARD ", N, N);
printf("\n\n");
for(i = 0 ; i<N ; i++) { for(j = 0 ; j<N ;
j++) {
board[i][j] = 0;
}
}
nqueen(N);
for(i = 0 ; i<N ; i++) { for(j = 0 ; j<N ;
j++) {
if(board[i][j] == 1)
printf(" Q |");
else

printf(" ^ |");
}
printf("\n");
}
}
OUTPUT:

RESULT:
SUM OF ALL SUBSETS
Ex. No. 13 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//sum of all subsets
#include <stdio.h>
int result(int [], int); int
power(int, int);
int main()
{
printf("\n\tSUM OF ALL SUBSETS\n"); int
test;
printf("\nEnter the no. of test cases : "); scanf("%d",
&test);
for(int j = 0 ; j<32 ; j++) printf("-");
for(int j = 0 ; j<test ; j++) { printf("\n\nTest Case %d\
n", j+1); int n;
printf("\nEnter n : ");
scanf("%d",&n);
int A[n], i;
printf("\nEnter the elements : "); for(i = 0 ; i<n
; i++)
scanf("%d",&A[i]); printf("\nAnswer : %d\
n", result(A,n)); for(i = 0 ; i<13 ; i++)
printf("-");
}
}
int result(int A[], int n)
{
int i, x = 0;
for(i = 0 ; i<n ; i++) x = x |
A[i];
int t = power(2, n-1) * x; return (t);
}
int power(int a, int b)
{
int ans = 1, i;
for(i = 1 ; i<=b ; i++) ans = ans
* a;
return (ans);
}
OUTPUT:

RESULT:
GRAPH COLORING
PROBLEM
Ex. No. 14 Date:

AIM:

ALGORITHM:
SOURCE CODE:
//graph coloring

#include <stdio.h>
#include <stdbool.h>
#define NODE 4
int graph[NODE][NODE] = { {0,1,0,1},
{1,0,1,0},
{0,1,0,1},
{1,0,1,0} };
void graphColoring()
{
int color[NODE]; //to assign colors to node 1
bool colorUsed[NODE];
//used to check whether color is used or not
int i, u, v; color[0] =
0;

for(i = 1 ; i<NODE ; i++)


color[i] = -1; //initially the vertices are unassigned

for(i = 0 ; i<NODE ; i++)


colorUsed[i] = false; //initially colors aren't chosen

for(u = 1 ; u<NODE ; u++) {


//for all other nodes with -1 vertices
for(v = 0 ; v<NODE ; v++) { if
(graph[u][v]) {
if (color[v] != -1) colorUsed[color[v]] =
true;
} //end of if
} //end of v
int col;
for(col = 0 ; col<NODE ; col++) { if (!
colorUsed[col])

/* find a color that is unassigned */


break;
} //end of col

color[u] = col;
for(v = 0 ; v<NODE ; v++) { if
(graph[u][v]) {
if (color[v] != 1)
colorUsed[color[v]] = false;
} //end of if
} //end of v
} //end of u

for(u = 0 ; u<NODE ; u++)


printf("\nNODE %d assigned with color %d\n", u+1,
color[u]);
}

int main()
{
printf("\n\tGRAPH COLORING PROBLEM\n");
graphColoring();
return 0;
}
OUTPUT:

RESULT:
DFS
Ex. No. 1 Date:

AIM:

ALGORITHM:
SOURCE CODE:

#include<stdio.h>

# define max 15

int n,e,top=-1;

int adj[max][max];

int status[max];

int stack[max];

int isempty()

if(top==-1)

return 1;

else

return 0;

void push(int e)

top++;

stack[top]=e;

void pop()

top--;
}

int peek()

return stack[top];

void dfs(int node)

int x,flag;

push(node);

while(!isempty())

flag=0;

x=peek();

if(status[x]==0)

printf("%d",x);

status[x]=1;

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

if(adj[x][i]==1 &&
status[i]==0)
{

push(i);

flag=1;

break;

if(flag==0)

pop();

int main()

scanf("%d%d",&n,&e);

int
edges1[e+1],edges2[e+1
];

for(int i=1;i<e+1;i++)

scanf("%d",&edges1[i])
;

for(int i=1;i<e+1;i++)

scanf("%d",&edges2[i])
;
for(int i=1;i<e+1;i++)

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

adj[i][j]=0;

for(int i=0;i<e+1;i++)

adj[edges1[i]]
[edges2[i]]=1;

adj[edges2[i]]
[edges1[i]]=1;

for(int i=1;i<e+1;i++)

status[i]=0;

dfs(1);

return 0;

OUTPUT:

RESULT:

BFS
Ex. No. 1 Date:
AIM:

ALGORITHM:

SOURCE CODE:

#include <stdio.h>
# define MAX 15
int n, e, front=-1, rear=-1;
int adj[MAX][MAX];
int status[MAX];
int queue[MAX];
int isEmpty()
{
if(front == -1)
return -1;
else
return 0;
}
void enqueue(int ele)
{
if(front==-1)
front++;
rear++;
queue[rear]=ele;
}
void dequeue()
{
printf("%d", queue[front]);
if(front == rear){
front=-1;
rear=-1;
}
else
rear++;
}
int getfront()
{
return queue[front];
}
void bfs(int node)
{
enqueue(node);
status[node]=1;
int x = node;
while(!isEmpty())
{
dequeue();
for(int i = 1; i <= n; i++)
{
if(adj[x][i] == 1 && status[i]==0){
enqueue(i);
status[i] = 1;
}
}
x = getfront();
}
}
int main()
{
scanf("%d %d", &n, &e);
int edges1[e+1], edges2[e+1];
for(int i = 1; i < e+1; i++)
scanf("%d",&edges1[i]);
for(int i = 1; i < e+1; i++)
scanf("%d",&edges2[i]);
for(int i = 1; i < e+1; i++)
for(int j = 1; j < n+1; j++)
adj[i][j] = 0;
for(int i=1;i<e+1;i++)
{
adj[edges1[i]][edges2[i]]=1;
adj[edges2[i]][edges1[i]]=1;
}
for(int i = 1;i<=e+1;i++)
status[i]=0;
bfs(1);
return 0;
}

OUTPUT:

RESULT:

Prim’s Algorithm
Ex. No. 1 Date:
AIM:

ALGORITHM:

SOURCE CODE:

#include <stdio.h>
#include <limits.h>
#define size 20
int graph[size][size];
int visit[size];
int n, e;
void prims()
{
int i, j, k, min, vertex1, vertex2, total = 0;
for(i = 1; i <= n;i++)
visit[i] = 0;
visit[1] = 1;
for(k = 2; k <= n; k++){
min = INT_MAX;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(graph[i][j] && ((visit[i] && !visit[j])||(!visit[i]&&visit[j]))){
if(graph[i][j] < min){
min = graph[i][j];
vertex1 = i;
vertex2 = j;
}
}
}
}
printf("%d - %d %d\n", vertex1, vertex2, min);
visit[vertex1] = visit[vertex2] = 1;
total = total + min;
}
printf("%d", total);
}
int main(){
int i, j;
scanf("%d", &n);
scanf("%d", &e);
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++){
graph[i][j] = 0;
}
}
int vertex1[e], vertex2[e], length[e];
for(i = 1;i <= e;i++)
scanf("%d", &vertex1[i]);
for(i = 1;i <= e;i++)
scanf("%d", &vertex2[i]);
for(i = 1;i <= e;i++)
scanf("%d", &length[i]);
for(i=1;i<=e;i++)
{
graph[vertex1[i]][vertex2[i]] = length[i];
graph[vertex1[i]][vertex2[i]] = length[i];
}
prims();
return 0;
}

OUTPUT:

RESULT:

Dijkrsta Algorithm
Ex. No. 1 Date:
AIM:

ALGORITHM:

SOURCE CODE:

#include <stdio.h>
#include <limits.h>
int main(){
int n, min, min_vertex;
scanf("%d", &n);
int adj[n][n], states[n], cost[n];
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
scanf("%d", &adj[i][j]);
}
states[i] = 0;
cost[i] = INT_MAX;
}
cost[0] = 0;
for(int i = 0; i < n; i++){
min = INT_MAX;
for(int v=0;v<n;v++){
if(states[v] == 0 && cost[v] <= min){
min = cost[v];
min_vertex = v;
}
}
states[min_vertex] = 1;
for(int v =0; v < n;v++){
if(states[v] == 0 && adj[min_vertex][v] && cost[min_vertex]!=INT_MAX &&
cost[min_vertex] + adj[min_vertex][v] < cost[v]){
cost[v] = cost[min_vertex] + adj[min_vertex][v];
}
}
}
for(int i = 0; i < n;i++)
printf("%d %d\n", i, cost[i]);
return 0;
}

OUTPUT:
RESULT:

You might also like