0% found this document useful (0 votes)
19 views26 pages

ADSA Lab Programs Formatted

The document outlines various algorithms and data structures as part of the ADSA Lab Programs for the Department of CSE at G. Pulla Reddy Engineering College. It includes implementations for algorithms such as All Pairs Shortest Path, Breadth First Traversal, various string search methods, sorting algorithms, and problem-solving techniques like Job Sequencing and the Knapsack Problem. Each section provides code snippets and explanations for the respective algorithms.
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)
19 views26 pages

ADSA Lab Programs Formatted

The document outlines various algorithms and data structures as part of the ADSA Lab Programs for the Department of CSE at G. Pulla Reddy Engineering College. It includes implementations for algorithms such as All Pairs Shortest Path, Breadth First Traversal, various string search methods, sorting algorithms, and problem-solving techniques like Job Sequencing and the Knapsack Problem. Each section provides code snippets and explanations for the respective algorithms.
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

ADSA Lab Programs

Department of CSE
G. Pulla Reddy Engineering College
(JNTUA Scheme 2023)
Table of Contents

1. ~All Pairs Shortest Path


2. ~Breadth first Traversal(BFT)
3. ~BoyerMoore String Search
4. ~BruteForce String Search
5. ~Depth First Traversal(DFT)
6. ~Heap Sort
7. ~Job Sequencing with Deadlines
8. ~Knapsack Problem
9. ~Merge Sort
10. ~N-Queens
11. ~Quick Sort
12. ~Single Source Shortest Path
~All Pairs Shortest Path~
#include <stdio.h>
#include<conio.h>
#define INF 9999
#define MAX 20
int min(int a, int b) {
return (a < b) ? a : b;
}
int main() {
int n, i, j, k;
int dist[MAX][MAX];
clrscr();
printf("Enter number of vertices: ");
scanf("%d", &n);
printf("Enter adjacency matrix (use %d for INF):\n", INF);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", &dist[i][j]);
for (k = 0; k < n; k++)
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
printf("All pairs shortest path matrix:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (dist[i][j] == INF)
printf("INF ");
else
printf("%3d ", dist[i][j]);
}
printf("\n");
}
getch();
return 0;
}
~Breadth first Traversal(BFT)~
#include <stdio.h>
#include<conio.h>
#define MAX 20
int adj[MAX][MAX];
int visited[MAX];
int queue[MAX], front = -1, rear = -1;
int n;
void bfs(int start) {
int i, v;
for (i = 0; i < n; i++)
visited[i] = 0;
front = rear = 0;
queue[rear] = start;
visited[start] = 1;
printf("BFS Traversal: ");
while (front <= rear) {
v = queue[front++];
printf("%d ", v);
for (i = 0; i < n; i++) {
if (adj[v][i] == 1 && visited[i] == 0) {
queue[++rear] = i;
visited[i] = 1;
}
}
}
printf("\n");
}
int main() {
int i, j, start;
clrscr();
printf("Enter number of vertices: ");
scanf("%d", &n);
printf("Enter adjacency matrix:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &adj[i][j]);
}
}
printf("Enter starting vertex (0 to %d): ", n - 1);
scanf("%d", &start);
bfs(start);
getch();
return 0;
}
~BoyerMoore String Search~
#include <stdio.h>
#include <string.h>
#include<conio.h>
#define NO_OF_CHARS 256
int max(int a, int b) {
return (a > b) ? a : b;
}
void badCharHeuristic(char *str, int size, int badchar[NO_OF_CHARS]) {
int i;
for (i = 0; i < NO_OF_CHARS; i++)
badchar[i] = -1;
for (i = 0; i < size; i++)
badchar[(int) str[i]] = i;
}
int boyerMoore(char text[], char pattern[]) {
int m = strlen(pattern);
int n = strlen(text);
int s = 0;
int badchar[NO_OF_CHARS];
badCharHeuristic(pattern, m, badchar);
while (s <= (n - m)) {
int j = m - 1;
while (j >= 0 && pattern[j] == text[s + j])
j--;
if (j < 0) {
return s;
} else {
s += max(1, j - badchar[(int) text[s + j]]);
}
}
return -1;
}
int main() {
char text[100], pattern[50];
int pos;
clrscr();
printf("Enter text: ");
gets(text);
printf("Enter pattern: ");
gets(pattern);
pos = boyerMoore(text, pattern);
if (pos == -1)
printf("Pattern not found\n");
else
printf("Pattern found at position %d\n", pos);
getch();
return 0;
}
~BruteForce String Search~
#include <stdio.h>
#include <string.h>
#include<conio.h>
int bruteForce(char text[], char pattern[]) {
int n = strlen(text);
int m = strlen(pattern);
int i, j, flag;
for (i = 0; i <= n - m; i++) {
flag = 1;
for (j = 0; j < m; j++) {
if (text[i + j] != pattern[j]) {
flag = 0;
break;
}
}
if (flag == 1)
return i;
}
return -1;
}
int main() {
char text[100], pattern[50];
int pos;
clrscr();
printf("Enter the main text: ");
gets(text);
printf("Enter the pattern to search: ");
gets(pattern);
printf("\nText entered: %s\n", text);
printf("Pattern entered: %s\n", pattern);
pos = bruteForce(text, pattern);
if (pos == -1)
printf("Pattern not found in the text\n");
else
printf("Pattern found at position %d (0-based index)\n", pos);
getch();
return 0;
}
~Depth First Traversal(DFT)~
#include <stdio.h>
#include<conio.h>
#define MAX 20
int adj[MAX][MAX];
int visited[MAX];
int n;
void dfs(int v) {
int i;
visited[v] = 1;
printf("%d ", v);
for (i = 0; i < n; i++) {
if (adj[v][i] == 1 && visited[i] == 0) {
dfs(i);
}
}
}
int main() {
int i, j, start;
clrscr();
printf("Enter number of vertices: ");
scanf("%d", &n);
printf("Enter adjacency matrix:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &adj[i][j]);
}
}
for (i = 0; i < n; i++)
visited[i] = 0;
printf("Enter starting vertex (0 to %d): ", n - 1);
scanf("%d", &start);
printf("DFS Traversal: ");
dfs(start);
printf("\n");
getch();
return 0;
}
~Heap Sort~
#include <stdio.h>
#include<conio.h>
void heapify(int arr[], int n, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && arr[left] > arr[largest])
largest = left;

if (right < n && arr[right] > arr[largest])


largest = right;
if (largest != i) {
int temp = arr[i];
arr[i] = arr[largest];
arr[largest] = temp;

heapify(arr, n, largest);
}
}
void heapSort(int arr[], int n) {
int i;
for (i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
for (i = n - 1; i >= 0; i--) {
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
heapify(arr, i, 0);
}
}
int main() {
int n, i;
int arr[50];
clrscr();
printf("Enter number of elements: ");
scanf("%d", &n);
printf("Enter %d elements:\n", n);
for (i = 0; i < n; i++)
scanf("%d", &arr[i]);
heapSort(arr, n);
printf("Sorted array:\n");
for (i = 0; i < n; i++)
printf("%d ", arr[i]);
getch();
return 0;
}
~Job Sequencing with Deadlines~
#include <stdio.h>
#include<conio.h>
struct Job {
int id, deadline, profit;
};
void sort(struct Job jobs[], int n) {
int i, j;
struct Job temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (jobs[i].profit < jobs[j].profit) {
temp = jobs[i];
jobs[i] = jobs[j];
jobs[j] = temp;
}
}
}
}
int min(int a, int b) {
return (a < b) ? a : b;
}
int main() {
int n, i, j, maxd = 0, slot[20], result[20], count = 0, totalProfit = 0;
struct Job jobs[20];
clrscr();
printf("Enter number of jobs: ");
scanf("%d", &n);
printf("Enter job id, deadline and profit:\n");
for (i = 0; i < n; i++) {
scanf("%d%d%d", &jobs[i].id, &jobs[i].deadline, &jobs[i].profit);
if (jobs[i].deadline > maxd)
maxd = jobs[i].deadline;
}
sort(jobs, n);
for (i = 1; i <= maxd; i++)
slot[i] = -1;
for (i = 0; i < n; i++) {
for (j = min(maxd, jobs[i].deadline); j >= 1; j--) {
if (slot[j] == -1) {
slot[j] = jobs[i].id;
totalProfit += jobs[i].profit;
count++;
break;
}
}
}
printf("Selected jobs: ");
for (i = 1; i <= maxd; i++) {
if (slot[i] != -1)
printf("%d ", slot[i]);
}
printf("\nTotal profit: %d\n", totalProfit);
getch();
return 0;
}
~Knapsack Problem~
#include <stdio.h>
#include<conio.h>
struct Item {
int weight, value;
};
void sort(struct Item items[], int n) {
int i, j;
struct Item temp;
double r1, r2;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
r1 = (double)items[i].value / items[i].weight;
r2 = (double)items[j].value / items[j].weight;
if (r1 < r2) {
temp = items[i];
items[i] = items[j];
items[j] = temp;
}
}
}
}
int main() {
int n, i, W;
struct Item items[20];
double total = 0.0;
clrscr();
printf("Enter number of items: ");
scanf("%d", &n);
printf("Enter weight and value of each item:\n");
for (i = 0; i < n; i++)
scanf("%d%d", &items[i].weight, &items[i].value);
printf("Enter capacity of knapsack: ");
scanf("%d", &W);
sort(items, n);
for (i = 0; i < n; i++) {
if (items[i].weight <= W) {
W -= items[i].weight;
total += items[i].value;
} else {
total += (double)items[i].value * W / items[i].weight;
break;
}
}
printf("Maximum value in knapsack = %.2f\n", total);
getch();
return 0;
}
~Merge Sort~
#include <stdio.h>
#include<stdlib.h>
void merge(int a[], int l, int m, int r) {
int i = l, j = m + 1, k = l, temp[50];
while (i <= m && j <= r) {
if (a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while (i <= m)
temp[k++] = a[i++];
while (j <= r)
temp[k++] = a[j++];
for (i = l; i <= r; i++)
a[i] = temp[i];
}
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);
}
}
int main() {
int n, i, a[50];
clrscr();
printf("Enter number of elements: ");
scanf("%d", &n);
printf("Enter %d elements:\n", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
mergesort(a, 0, n - 1);
printf("Sorted array:\n");
for (i = 0; i < n; i++)
printf("%d ", a[i]);
getch();
return 0;
}
~N-Queens~
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
int board[20],count;
int main()
{
int n,i,j;
void queen(int row,int n);
clrscr();
printf(" - N Queens Problem Using Backtracking -");
printf("\n\nEnter number of Queens:");
scanf("%d",&n);
queen(1,n);
getch();
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 place(int row,int column)
{
int i;
for(i=1;i<=row-1;++i)
{
if(board[i]==column) return 0;
else
if(abs(board[i]-column)==abs(i-row))
return 0;
}
return 1;
}
void queen(int row,int n)
{
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);
}
}
}
~Quick Sort~
#include <stdio.h>
#include<conio.h>
void quicksort(int a[], int low, int high) {
int i = low, j = high, pivot = a[(low + high) / 2], temp;
while (i <= j) {
while (a[i] < pivot) i++;
while (a[j] > pivot) j--;
if (i <= j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
if (low < j)
quicksort(a, low, j);
if (i < high)
quicksort(a, i, high);
}
int main() {
int n, i, a[50];
clrscr();
printf("Enter number of elements: ");
scanf("%d", &n);
printf("Enter %d elements:\n", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
quicksort(a, 0, n - 1);
printf("Sorted array:\n");
for (i = 0; i < n; i++)
printf("%d ", a[i]);
getch();
return 0;
}
~Single Source Shortest Path~
#include <stdio.h>
#include<conio.h>
#define INF 9999
#define MAX 20
int n;
int cost[MAX][MAX];
void dijkstra(int start) {
int dist[MAX], visited[MAX], count, mindist, nextnode, i, j;
for (i = 0; i < n; i++) {
dist[i] = cost[start][i];
visited[i] = 0;
}
dist[start] = 0;
visited[start] = 1;
count = 1;
while (count < n - 1) {
mindist = INF;
for (i = 0; i < n; i++)
if (dist[i] < mindist && !visited[i]) {
mindist = dist[i];
nextnode = i;
}
visited[nextnode] = 1;
for (i = 0; i < n; i++)
if (!visited[i])
if (mindist + cost[nextnode][i] < dist[i])
dist[i] = mindist + cost[nextnode][i];
count++;
}
printf("Vertex\tDistance from source\n");
for (i = 0; i < n; i++)
printf("%d\t%d\n", i, dist[i]);
}
int main() {
int i, j, start;
clrscr();
printf("Enter number of vertices: ");
scanf("%d", &n);
printf("Enter adjacency matrix (use 9999 for no edge):\n");
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", &cost[i][j]);
printf("Enter starting vertex: ");
scanf("%d", &start);
dijkstra(start);
getch();
return 0;
}

You might also like