Final Lab
Final Lab
#include<stdio.h> pro 2
#define INF 999 #include<stdio.h>
#define MAX 100 #define INF 999
int prim(int c[10][10],int n,int s)
int p[MAX], c[MAX][MAX],t[MAX][2];
{
int find (int v). { int v[10],i,j,sum=0,ver[10],d[10],min,u;
while(p[v]) for(i=1;i<=n;i++)
v=p[v]; {
return v; } ver[i]=s;
void union1(int i,int j). { d[i]=c[s][i];
v[i]=0;
p[j]=i; } }
void kruskal(int n). { v[s]=1;
int i,j,k,u,v,min,res1,res2,sum=0; for(i=1;i<=n-1;i++)
for(k=1;k<n;k++). { {
min=INF; min=INF;
for(i=1;i<n-1;i++). { for(j=1;j<=n;j++)
if(v[j]==0 && d[j]<min)
for(j=1;j<=n;j++). { {
if(i==j)continue; min=d[j];
if(c[i][j]<min). { u=j;
u=find(i); }
v=find(j); v[u]=1;
sum=sum+d[u];
if(u!=v) {
printf("\n%d -> %d sum=%d",ver[u],u,sum);
res1=i; for(j=1;j<=n;j++)
res2=j; if(v[j]==0 && c[u][j]<d[j])
min=c[i][j];. } }. }. } {
union1(res1, find(res2)); d[j]=c[u][j];
t[k][1] =res1; ver[j]=u;
}
t[k][2]=res2; }
sum=sum+min; } return sum;
printf("\nCost of spanning tree is=%d", }
sum);printf("\nEdgesof spanning tree are void main()
:\n"); {
int c[10][10],i,j,res,s,n;
for(i=1;i<n;i++)
printf("\nEnter n value:");
printf("%d -> %d\n",t[i][1],t[i][2]);
scanf("%d",&n);
}
printf("\nEnterthegraphdata:\n");
int main()
for(i=1;i<=n;i++)
{int i,j,n;
for(j=1;j<=n;j++)
printf("\nEnter the n value:");scanf("
%d",&n);
scanf("%d",&c[i][j]);
for(i=1;i<=n;i++)p[i]=0; printf("\nEnterthesourcenode:");
printf("\nEnter the graph data:\n");
scanf("%d",&s);
for(i=1;i<=n;i++) res=prim(c,n,s);
for(j=1;j<=n;j++) printf("\nCost=%d",res);
scanf("%d",&c[i][j]); }
kruskal(n);
return 0;}
pro 3A
#include<stdio.h> for(i=1;i<=n;i++)
#define INF 999 for(j=1;j<=n;j++)
int min(int a, int b) scanf("%d",&a[i][j]);
{ warsh(a,n);
printf("\nResultant path matrix\n");for(i=1;i<
return(a<b)?a:b;
=n;i++). {
}
for(j=1;j<=n;j++)
void floyd(int p[][10],int n) printf("%d ",a[i][j]);
{ printf("\n");
int i,j,k; }return 0;. }
for(k=1;k<=n;k++) pro 4
for(i=1;i<=n;i++) #include<stdio.h>
for(j=1;j<=n;j++) #define INF 999
p[i][j]=min(p[i][j],p[i][k]+p[k][j]); void dijkstra(int c[10][10],int n,int s,int
} d[10]) {
void main() int v[10],min,u,i,j;
for(i=1;i<=n;i++). {
{
d[i]=c[s][i];
int a[10][10],n,i,j;
v[i]=0;. }
printf("\n Enter the n value:"); v[s]=1;
scanf("%d",&n); for(i=1;i<=n;i++) {
printf("\n Enter the graph data:\ min=INF;
n");for(i=1;i<=n;i++) for(j=1;j<=n;j++)
for(j=1;j<=n;j++) if(v[j]==0 && d[j]<min) {
scanf("%d",&a[i][j]); min=d[j];
floyd(a,n); u=j; }
printf("\n Shortest path matrix\n v[u]=1;
"); for(j=1;j<=n;j++)
for(i=1;i<=n;i++) if(v[j]==0 && (d[u]+c[u][j])<d[j])
d[j]=d[u]+c[u][j]; } }
{
intmain() {
for(j=1;j<=n;j++) intc[10][10],d[10],i,j,s,sum,n;
printf("%d ",a[i][j]); printf("\nEnternvalue:");
printf("\n"); scanf("%d",&n);
} printf("\nEnterthegraphdata:\n");
} for(i=1;i<=n;i++)
pro 3B for(j=1;j<=n;j++)
#include<stdio.h> scanf("%d",&c[i][j]);
void warsh(int p[][10],int n){ printf("\nEnterthesoucenode:");
int i,j,k; scanf("%d",&s);
for(k=1;k<=n;k++) dijkstra(c,n,s,d);
for(i=1;i<=n;i++)
for(i=1;i<=n;i++)
printf("\nShortestdistancefrom%dto%
for(j=1;j<=n;j++) dis%d",s,i,d[i]);
p[i][j]=p[i][j]||p[i][k]&&p[k][j]; return0;
} }
intmain()
{
inta[10][10],n,i,j;
printf("\nEnterthenvalue:");
scanf("%d",&n);
printf("\nEnterthegraphdata:\n");
PRO 8 int n;
#include <stdio.h> printf("Enter the number of elements: ");
#include <stdlib.h> scanf("%d", &n);
#include <time.h> if (n <= 5000)
void merge(int arr[], int left, int mid, int right) {
{
printf("Please enter a value greater than
int i, j, k;
int n1 = mid - left + 1; 5000\n");
int n2 = right - mid; return 1; }
int *L = (int *)malloc(n1 * sizeof(int)); int *arr = (int *)malloc(n * sizeof(int));
int *R = (int *)malloc(n2 * sizeof(int)); if (arr == NULL)
for (i = 0; i < n1; i++) {
L[i] = arr[left + i]; printf("Memory allocation failed\n");
for (j = 0; j < n2; j++) return 1;
R[j] = arr[mid + 1 + j]; }
i = 0; generateRandomArray(arr, n);
j = 0;
clock_t start = clock();
k = left;
while (i < n1 && j < n2) for (int i = 0; i < 1000; i++)
{ {
if (L[i] <= R[j]) mergeSort(arr, 0, n - 1);
{ }
arr[k] = L[i]; clock_t end = clock();
i++; double time_taken = ((double)(end - start)) /
} CLOCKS_PER_SEC / 1000.0;
else printf("Time taken to sort %d elements: %f
{ seconds\n", n, time_taken);
arr[k] = R[j];
free(arr);
j++;
} return 0;
k++; }
} PRO 6
while (i < n1) #include<stdio.h>
{ int w[10],p[10],n;
arr[k] = L[i]; int max(int a,int b)
i++; {
k++; return a>b?a:b;
} }
while (j < n2)
int knap(int i,int m)
{
arr[k] = R[j]; {
j++; if(i==n) return w[i]>m?0:p[i];
k++; if(w[i]>m) return knap(i+1,m);
} return max(knap(i+1,m),knap(i+1,m-w[i])+p[i]);
free(L); }
free(R); int main()
} {
void mergeSort(int arr[], int left, int right) int m,i,max_profit;
{ printf("\nEnter the no. of objects:");
if (left < right)
scanf("%d",&n);
{
int mid = left + (right - left) / 2; printf("\nEnter the knapsack capacity:");
mergeSort(arr, left, mid); scanf("%d",&m);
mergeSort(arr, mid + 1, right); printf("\nEnter profit followed by weight:\n");
merge(arr, left, mid, right); for(i=1;i<=n;i++)
} scanf("%d %d",&p[i],&w[i]);
} max_profit=knap(1,m);
void generateRandomArray(int arr[], int n) printf("\nMax profit=%d",max_profit);
{ return 0;
for (int i = 0; i < n; i++) }
arr[i] = rand() % 100000;
int main()
{
PRO 5 for (i = 0; i < n; i++) {
#include<stdio.h> ratio[i] = (double)p[i] / w[i];
int temp[10],k=0; }
void sort(int a[][10],int id[],int n) for (i = 0; i < n - 1; i++) {
{ for (int j = i + 1; j < n; j++) {
int i,j; if (ratio[i] < ratio[j]) {
for(i=1;i<=n;i++) double temp = ratio[i];
{ ratio[i] = ratio[j];
if(id[i]==0) ratio[j] = temp;
{ int temp2 = w[i];
id[i]=-1; w[i] = w[j];
temp[++k]=i; w[j] = temp2;
for(j=1;j<=n;j++) temp2 = p[i];
{ p[i] = p[j];
if(a[i][j]==1 && id[j]!=-1) p[j] = temp2;
id[j]--; }
} }
i=0;}}} }
void main() int currentWeight = 0;
{ maxprofit = 0.0;
int a[10][10],id[10],n,i,j; for (i = 0; i < n; i++) {
printf("\nEnter the n value:"); if (currentWeight + w[i] <= m) {
scanf("%d",&n); x[i] = 1; // Item i is selected
for(i=1;i<=n;i++) currentWeight += w[i];
id[i]=0; maxprofit += p[i];
printf("\nEnter the graph data:\n"); } else {
for(i=1;i<=n;i++) x[i] = (m - currentWeight) / (double)w[i]
for(j=1;j<=n;j++) ;
{ maxprofit += x[i] * p[i];
scanf("%d",&a[i][j]);
break;
if(a[i][j]==1)
}
id[j]++;
}
printf("Optimal solution for greedy
}
method: %.1f\n", maxprofit);
sort(a,id,n);
printf("Solution vector for greedy
if(k!=n)
method: ");
printf("\nTopological ordering not possible");
for (i = 0; i < n; i++)
else
printf("%d\t", x[i]);
{
}
printf("\nTopological ordering is:");
int main() {
for(i=1;i<=k;i++)
printf("Enter the number of objects: ");
printf("%d ",temp[i]);. }. }
scanf("%d", &n);
PRO 7 printf("Enter the objects' weights: ");
#include <stdio.h> for (i = 0; i < n; i++)
#define MAX 50 scanf("%d", &w[i]);
int p[MAX], w[MAX], x[MAX]; printf("Enter the objects' profits: ");
double maxprofit; for (i = 0; i < n; i++)
int n, m, i; scanf("%d", &p[i]);
void greedyKnapsack(int n, int w[], int p[], int printf("Enter the maximum capacity: ");
m) { scanf("%d", &m);
double ratio[MAX]; greedyKnapsack(n, w, p, m);
return 0;
}
PRO 9 PRO 10
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
void selectionSort(int arr[], int n) { void swap(int* a, int* b). {
int i, j, min_idx; int t = *a;
for (i = 0; i < n-1; i++) { *a = *b;
min_idx = i; *b = t; }
for (j = i+1; j < n; j++) { int partition(int arr[], int low, int high). {
if (arr[j] < arr[min_idx]) { int pivot = arr[high];
min_idx = j; } } int i = (low - 1);
int temp = arr[min_idx]; for (int j = low; j <= high - 1; j++) {
arr[min_idx] = arr[i]; if (arr[j] < pivot) {
arr[i] = temp; }. } i++;
void generateRandomNumbers(int arr[], int swap(&arr[i], &arr[j]); } }
n) swap(&arr[i + 1], &arr[high]);
{ return (i + 1); }
for (int i = 0; i < n; i++) { void quickSort(int arr[], int low, int high) {
arr[i] = rand() % 10000; // Generate if (low < high) {
random numbers between 0 and 9999 int pi = partition(arr, low, high);
} } quickSort(arr, low, pi - 1);
int main(). { quickSort(arr, pi + 1, high); }. }
int n; void generateRandomNumbers(int arr[], int
printf("Enter number of elements: "); n)
scanf("%d", &n); {
if (n <= 5000) for (int i = 0; i < n; i++) {
{ arr[i] = rand() % 100000; }. }
printf("Please enter a value greater int main() {
than 5000\n"); int n;
return 1;
printf("Enter number of elements: ");
}
scanf("%d", &n); if (n <= 5000)
int *arr = (int *)malloc(n * sizeof(int));
{
printf("Please enter a value greater
if (arr == NULL)
than 5000\n");
{
return 1; }
printf("Memory allocation failed\n");
int *arr = (int *)malloc(n * sizeof(int));
return 1;
if (arr == NULL) {
}
printf("Memory allocation failed\n");
generateRandomNumbers(arr, n);
return 1; }
clock_t start = clock();
generateRandomNumbers(arr, n);
selectionSort(arr, n);
clock_t start = clock();
clock_t end = clock();
quickSort(arr, 0, n - 1);
double time_taken = ((double)(end - clock_t end = clock();
start)) / CLOCKS_PER_SEC;
double time_taken = ((double)(end -
printf("Time taken to sort %d elements: start)) / CLOCKS_PER_SEC;
%f seconds\n", n, time_taken); printf("Time taken to sort %d elements:
free(arr); %f seconds\n", n, time_taken);
return 0; free(arr);
} return 0;
}
PRO 11
#include <stdio.h>#include <stdlib.h>
PRO 12 #include <time.h>
include<stdio.h> void merge(int arr[], int left, int mid, int
#include<conio.h> right) {
#include<stdlib.h> int i, j, k; int n1 = mid - left + 1;
#define MAX 50 int n2 = right - mid;
int can_place(int c[],int r). { int *L = (int *)malloc(n1 * sizeof(int));
int i; int *R = (int *)malloc(n2 * sizeof(int));
for(i=0;i<r;i++) for (i = 0; i < n1; i++)
if(c[i]==c[r] || (abs(c[i]-c[r])== L[i] = arr[left + i];
abs(i-r))) for (j = 0; j < n2; j++)
R[j] = arr[mid + 1 + j]; i = 0; j = 0;
return 0;
k =left;
return 1; }. { while (i < n1 && j < n2) {
void display(int c[],int n) if (L[i] <= R[j]) {
int i,j; arr[k] = L[i]; i++; }
char cb[10][10]; else {
for(i=0;i<n;i++) arr[k] = R[j]; j++; } k++; }
for(j=0;j<n;j++) while (i < n1) {
cb[i][j]='-'; arr[k] = L[i]; i++; k++; }
for(i=0;i<n;i++) while (j < n2) {
cb[i][c[i]]='Q'; arr[k] = R[j]; j++;
for(i=0;i<n;i++). { k++; } free(L); free(R); }
for(j=0;j<n;j++) void mergeSort(int arr[], int left, int right).
{
printf("%c",cb[i][j]);
if (left < right) {
printf("\n"); }. }. { int mid = left + (right - left) / 2;
void n_queens(int n) mergeSort(arr, left, mid);
int r; mergeSort(arr, mid + 1, right);
int c[MAX]; merge(arr, left, mid, right); }}
c[0]=-1; void generateRandomArray(int arr[], int n)
r=0; {
while(r>=0) for (int i = 0; i < n; i++)
{ c[r]++; arr[i] = rand() % 100000; //
while(c[r]<n && !can_place(c,r)) Generate random integers between 0 and
c[r]++; 99999 }
if(c[r]<n) int main() {
int n;
{ if(r==n-1)
printf("Enter the number of elements: "
{ display(c,n); );
printf("\n\n"); } scanf("%d", &n);
else if (n <= 5000) {
{ r++; printf("Please enter a value greater
c[r]=-1; }. } than 5000\n");
else return 1; }
r--; }. } int *arr = (int *)malloc(n * sizeof(int));
void main() if (arr == NULL) {
{ printf("Memory allocation failed\n");
int n; return 1; }
clrscr(); generateRandomArray(arr, n);
clock_t start = clock();
printf("\nEnter the no. of queens
for (int i = 0; i < 1000; i++) {
:");
mergeSort(arr, 0, n - 1); }
scanf("%d",&n); clock_t end = clock();
n_queens(n); double time_taken = ((double)(end -
getch(); start)) / CLOCKS_PER_SEC / 1000.0;
} printf("Time taken to sort %d elements:
%f seconds\n", n, time_taken);
free(arr);
return 0;}