DAA_9-12
DAA_9-12
OUTPUT:
PROGRAM – 10
AIM: Write a program to implement travelling salesperson problem.
#include <stdio.h>
#include <limits.h>
#define MAX_CITIES 10
int n;
int dist[MAX_CITIES][MAX_CITIES];
int totalDistance = 0;
return totalDistance;}
if (pos == n) {
*minDistance = currentDistance;
bestTour[i] = tour[i];
return;}
tour[pos] = tour[i];
tour[i] = temp;
temp = tour[pos];
tour[pos] = tour[i];
tour[i] = temp;
}}
int main() {
scanf("%d", &n);
scanf("%d", &dist[i][j]);
tour[i] = i;}
printf("\n");
return 0;}
OUTPUT:
PROGRAM-11
AIM: Write a program to find the minimum cost spanning tree using Kruskal’s algorithm.
#include <stdio.h>
#include <stdlib.h>
#define MAX_EDGES 100
#define MAX_VERTICES 20
typedef struct {
int u, v, weight;
} Edge;
typedef struct {
int parent;
int rank;
} Subset;
int find(Subset subsets[], int i) {
if (subsets[i].parent != i) {
subsets[i].parent = find(subsets, subsets[i].parent);
}
return subsets[i].parent;
}
void unionSets(Subset subsets[], int x, int y) {
int xroot = find(subsets, x);
int yroot = find(subsets, y);
if (xroot != yroot) {
if (subsets[xroot].rank < subsets[yroot].rank) {
subsets[xroot].parent = yroot;
} else if (subsets[xroot].rank > subsets[yroot].rank) {
subsets[yroot].parent = xroot;
} else {
subsets[yroot].parent = xroot;
subsets[xroot].rank++;
}
}
}
int compareEdges(const void *a, const void *b) {
return ((Edge *)a)->weight - ((Edge *)b)->weight;
}
void kruskal(Edge edges[], int V, int E) {
qsort(edges, E, sizeof(Edge), compareEdges);
Subset subsets[V];
for (int i = 0; i < V; i++) {
subsets[i].parent = i;
subsets[i].rank = 0;
}
Edge result[V - 1];
int e = 0;
int i = 0;
while (e < V - 1 && i < E) {
Edge currentEdge = edges[i++];
int x = find(subsets, currentEdge.u);
int y = find(subsets, currentEdge.v);
if (x != y) {
result[e++] = currentEdge;
unionSets(subsets, x, y);
}
}
printf("Minimum Cost Spanning Tree (MST):\n");
int minCost = 0;
for (int i = 0; i < e; i++) {
printf("%d -- %d == %d\n", result[i].u, result[i].v, result[i].weight);
minCost += result[i].weight;
}
printf("Total cost of MST: %d\n", minCost);
}
int main() {
int V, E;
printf("Enter number of vertices: ");
scanf("%d", &V);
printf("Enter number of edges: ");
scanf("%d", &E);
Edge edges[E];
printf("Enter the edges (u, v, weight):\n");
for (int i = 0; i < E; i++) {
scanf("%d %d %d", &edges[i].u, &edges[i].v, &edges[i].weight);
}
kruskal(edges, V, E);
return 0;
}
OUTPUT:
PROGRAM-12
AIM: Write a Program to implement N Queen Problem using Backtracking.
#include <stdio.h>
#include <stdbool.h>
int board[MAX][MAX];
int N;
void printBoard() {
if (board[i][j] == 1)
printf(" Q ");
else
printf(" . ");
printf("\n");
if (board[i][col] == 1) {
return false;
} }
if (board[i][j] == 1) {
return false;
return false;
return true;
if (row == N) {
return true;
if (isSafe(row, col)) {
board[row][col] = 1;
if (solveNQueens(row + 1)) {
return true;
board[row][col] = 0;
return false;
int main() {
scanf("%d", &N);
board[i][j] = 0;
}
if (solveNQueens(0)) {
printf("Solution:\n");
printBoard();
} else {
return 0;
OUTPUT: