ADA Lab External
ADA Lab External
Kruskal’s algorithm
#include <stdio.h>
#define MAX 100
#define INF 9999
int parent[MAX];
int find(int i) {
while (parent[i])
i = parent[i];
return i;
}
int main() {
int cost[MAX][MAX], n, i, j, a, b, u, v, ne = 1, min, mincost = 0;
printf("Enter number of vertices: ");
scanf("%d", &n);
printf("Enter the cost adjacency matrix :\n");
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
scanf("%d", &cost[i][j]),
cost[i][j] = (cost[i][j] == 0) ? INF : cost[i][j];
printf("\nEdges in Minimum Spanning Tree:\n");
int prims() {
int dist[MAX], from[MAX], visited[MAX] = {1}, min_cost = 0;
int i, j, u, v, min_dist, edges = n - 1;
for (i = 0; i < n; i++) {
dist[i] = G[0][i] ? G[0][i] : INF;
from[i] = 0;
for (j = 0; j < n; j++)
S[i][j] = 0;
}
while (edges--) {
min_dist = INF;
for (i = 1; i < n; i++)
if (!visited[i] && dist[i] < min_dist)
min_dist = dist[v = i];
u = from[v];
S[u][v] = S[v][u] = G[u][v];
min_cost += G[u][v];
visited[v] = 1;
for (i = 1; i < n; i++)
if (!visited[i] && G[v][i] && G[v][i] < dist[i]) {
dist[i] = G[v][i];
from[i] = v;
}
}
return min_cost;
}
int main() {
int i, j, cost = prims();
printf("Spanning tree:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
printf("%d\t", S[i][j]);
printf("\n");
}
printf("Minimum cost = %d\n", cost);
return 0;
}
3a.Floyd’s algorithm
#include <stdio.h>
#define V 4
#define INF 9999
int main() {
int graph[V][V] = {
{0, 1, INF, INF},
{INF, 0, 2, INF},
{6, INF, 0, 3},
{3, -5, INF, 0}
};
floydWarshall(graph);
return 0;
}
3b.Warshal’s algorithm
#include <stdio.h>
#define MAX 10
int n;
int adj[MAX][MAX], reach[MAX][MAX];
void warshall() {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
reach[i][j] = adj[i][j];
for (int k = 0; k < n; k++)
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (reach[i][k] && reach[k][j])
reach[i][j] = 1;
}
int main() {
printf("Enter number of nodes: ");
scanf("%d", &n);
4.Dijkstra’s algorithm
#include <stdio.h>
#include <stdbool.h>
#define V 5
#define INF 99999
int minDistance(int dist[], bool visited[]) {
int min = INF, min_index = -1;
for (int i = 0; i < V; i++)
if (!visited[i] && dist[i] < min)
min = dist[i], min_index = i;
return min_index;
}
int main() {
int graph[V][V] = {
{0, 9, 6, 5, 3},
{9, 0, 0, 0, 0},
{6, 0, 0, 0, 0},
{5, 0, 0, 0, 0},
{3, 0, 0, 0, 0}
};
dijkstra(graph, 0);
return 0;
}
5.Topological algorithm
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int adj[MAX][MAX];
int in_degree[MAX];
int n;
void topologicalSort() {
int queue[MAX], front = 0, rear = 0;
int count = 0;
for (int i = 0; i < n; i++) {
if (in_degree[i] == 0)
queue[rear++] = i;
}
printf("Topological Order: ");
while (front < rear) {
int v = queue[front++];
printf("%d ", v);
count++;
for (int i = 0; i < n; i++) {
if (adj[v][i] == 1) {
in_degree[i]--;
if (in_degree[i] == 0)
queue[rear++] = i;
}
}
}
if (count != n) {
printf("\nCycle detected! Topological sorting is not possible.\n");
}
printf("\n");
}
int main() {
int edges, u, v;
printf("Enter number of vertices: ");
scanf("%d", &n);
printf("Enter number of edges: ");
scanf("%d", &edges);
for (int i = 0; i < n; i++) {
in_degree[i] = 0;
for (int j = 0; j < n; j++) {
adj[i][j] = 0;
}
}
#include <stdio.h>
int main() {
int capacity, max_profit;
printf("Enter number of items: ");
scanf("%d", &n);
printf("Enter profit and weight of each object:\n");
for (int i = 0; i < n; i++) {
printf("Item %d - Profit and Weight: ", i + 1);
scanf("%d %d", &profit[i], &weight[i]);
}
printf("Enter knapsack capacity: ");
scanf("%d", &capacity);
max_profit = knapsack(capacity);
printf("\nMaximum profit = %d\n", max_profit);
return 0;
}
7.discrete Knapsack
#include<stdio.h>
int main()
{
float weight[50],profit[50],ratio[50],Totalvalue,temp,capacity,amount;
int n,i,j;
printf("Enter the number of items :");
scanf("%d",&n);
for (i = 0; i < n; i++)
{
printf("Enter Weight and Profit for item[%d] :\n",i);
scanf("%f %f", &weight[i], &profit[i]);
}
printf("Enter the capacity of knapsack :\n");
scanf("%f",&capacity);
for(i=0;i<n;i++)
ratio[i]=profit[i]/weight[i];
for (i = 0; i < n; i++)
for (j = i + 1; j < n; j++)
if (ratio[i] < ratio[j])
{
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;
}
printf("Knapsack problems using Greedy Algorithm:\n");
for (i = 0; i < n; i++)
{
if (weight[i] > capacity)
break;
else
{
Totalvalue = Totalvalue + profit[i];
capacity = capacity - weight[i];
}
}
if (i < n)
Totalvalue = Totalvalue + (ratio[i]*capacity);
printf("\nThe maximum value is :%f\n",Totalvalue);
return 0;
}
8.Subset
#include <stdio.h>
#include <stdbool.h>
int main() {
printf("Enter number of elements: ");
scanf("%d", &n);
printf("Enter the elements: ");
for (int i = 0; i < n; i++) {
scanf("%d", &set[i]);
}
printf("Enter the target sum: ");
scanf("%d", &target);
findSubset(0, 0, 0);
if (!found)
printf("No subset with sum %d found.\n", target);
return 0;
}
9.Selection Sort
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int a[10000], i, j, temp, num;
clock_t st, et;
st = clock();
et = clock();
return 0;
}
10.Quick Sort
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n_values[] = {5000, 10000, 20000, 50000, 100000};
int num_tests = sizeof(n_values) / sizeof(n_values[0]);
printf("n\tTime Taken (ms)\n");
for (int i = 0; i < num_tests; i++) {
int n = n_values[i];
int *arr = (int *)malloc(n * sizeof(int));
generateRandomNumbers(arr, n);
clock_t start = clock();
quickSort(arr, 0, n - 1);
clock_t end = clock();
double time_taken_ms = ((double)(end - start)) * 1000 / CLOCKS_PER_SEC;
printf("%d\t%.3f ms\n", n, time_taken_ms);
free(arr);
}
return 0;
}
11.Merge Sort
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n;
printf("Enter the number of elements: ");
scanf("%d", &n);
int arr[n];
generateRandomNumbers(arr, n);
printf("\nUnsorted array:\n");
printArray(arr, n);
clock_t start = clock();
mergeSort(arr, 0, n - 1);
clock_t end = clock();
printf("\nSorted array:\n");
printArray(arr, n);
double time_taken = (double)(end - start) / CLOCKS_PER_SEC;
printf("\nTime taken to sort %d elements = %f seconds\n", n,
time_taken);
return 0;
}
12.N Queen’s
#include <stdbool.h>
#include <stdio.h>
#define N 8