EXP-2 PRIMS int key[V]; EXP- Dijkstra's for (int i = 0; i < V; i++) EXP-2 PRIMS int key[V]; EXP-
a's for (int i = 0; i < V; i++) EXP-2 PRIMS int key[V]; EXP- Dijkstra's for (int i = 0; i < V; i++)
#include <limits.h> bool mstSet[V]; #include <limits.h> dist[i] = INT_MAX, sptSet[i] = false; #include <limits.h> bool mstSet[V]; #include <limits.h> dist[i] = INT_MAX, sptSet[i] = false;
#include <stdbool.h> for (int i = 0; i < V; i++) #include <stdbool.h> dist[src] = 0; #include <stdbool.h> for (int i = 0; i < V; i++) #include <stdbool.h> dist[src] = 0;
#include <stdio.h> key[i] = INT_MAX, mstSet[i] = false; #include <stdio.h> for (int count = 0; count < V - 1; #include <stdio.h> key[i] = INT_MAX, mstSet[i] = false; #include <stdio.h> for (int count = 0; count < V - 1;
#define V 5 key[0] = 0; #define V 5 count++){ #define V 5 key[0] = 0; #define V 5 count++){
int minKey(int key[], parent[0] = -1; int minDistance(int dist[], bool int u = minDistance(dist, sptSet); int minKey(int key[], parent[0] = -1; int minDistance(int dist[], bool int u = minDistance(dist, sptSet);
bool mstSet[]) { for (int count = 0; count < V - 1; count++) sptSet[]) { sptSet[u] = true; bool mstSet[]) { for (int count = 0; count < V - 1; count++) sptSet[]) { sptSet[u] = true;
int min = INT_MAX, min_index=0; { int min = INT_MAX, min_index=0; for (int v = 0; v < V; v++) int min = INT_MAX, min_index=0; { int min = INT_MAX, min_index=0; for (int v = 0; v < V; v++)
for (int v = 0; v < V; v++) int u = minKey(key, mstSet); for (int v = 0; v < V; v++) if (!sptSet[v] && graph[u][v] != 999 && for (int v = 0; v < V; v++) int u = minKey(key, mstSet); for (int v = 0; v < V; v++) if (!sptSet[v] && graph[u][v] != 999 &&
if (mstSet[v] == false && key[v] < min) mstSet[u] = true; if (sptSet[v] == false && dist[v] <= min) graph[u][v] && dist[u] != INT_MAX && if (mstSet[v] == false && key[v] < min) mstSet[u] = true; if (sptSet[v] == false && dist[v] <= min) graph[u][v] && dist[u] != INT_MAX &&
min = key[v], min_index = v; for (int v = 0; v < V; v++) min = dist[v], min_index = v; dist[u] + graph[u][v] < dist[v]) min = key[v], min_index = v; for (int v = 0; v < V; v++) min = dist[v], min_index = v; dist[u] + graph[u][v] < dist[v])
return min_index; } if (graph[u][v] && mstSet[v] == false return min_index;} dist[v] = dist[u] + graph[u][v];} return min_index; } if (graph[u][v] && mstSet[v] == false return min_index;} dist[v] = dist[u] + graph[u][v];}
void printMST(int parent[], int && graph[u][v] < key[v]) void printSolu on(int dist[]){ printSolu on(dist);} void printMST(int parent[], int && graph[u][v] < key[v]) void printSolu on(int dist[]){ printSolu on(dist);}
graph[V][V]){ parent[v] = u, key[v] = graph[u][v];} prin ("Vertex \t\t Distance from int main(){ graph[V][V]){ parent[v] = u, key[v] = graph[u][v];} prin ("Vertex \t\t Distance from int main(){
prin ("Edge \tWeight\n"); printMST(parent, graph);} Source\n"); int graph[V][V]={{0,10,5,999,999},{ prin ("Edge \tWeight\n"); printMST(parent, graph);} Source\n"); int graph[V][V]={{0,10,5,999,999},{
for (int i = 1; i < V; i++) int main(){ for (int i = 0; i < V; i++) 999,0,999,1,999},{999,3,0,9,2}, for (int i = 1; i < V; i++) int main(){ for (int i = 0; i < V; i++) 999,0,999,1,999},{999,3,0,9,2},
prin ("%d - %d \t%d \n", parent[i], int graph[V][V]={{0,2,0,6,0},{2,0,3,8,5}, prin ("%d \t\t\t %d\n", i, dist[i]);} {999,999,999,0,999}, prin ("%d - %d \t%d \n", parent[i], int graph[V][V]={{0,2,0,6,0},{2,0,3,8,5}, prin ("%d \t\t\t %d\n", i, dist[i]);} {999,999,999,0,999},
i, graph[i][parent[i]]); } {0,3,0,0,7},{6,8,0,0,9},{0,5,7,9,0}}; void dijkstra(int graph[V][V], int src){ {2,999,999,6,0}}; i, graph[i][parent[i]]); } {0,3,0,0,7},{6,8,0,0,9},{0,5,7,9,0}}; void dijkstra(int graph[V][V], int src){ {2,999,999,6,0}};
void primMST(int graph[V][V]){ primMST(graph); int dist[V]; dijkstra(graph,0); void primMST(int graph[V][V]){ primMST(graph); int dist[V]; dijkstra(graph,0);
int parent[V]; return 0;} bool sptSet[V]; return 0;} int parent[V]; return 0;} bool sptSet[V]; return 0;}
EX- Kruskal parent[v]=u;} EXP-8 set S = {sl ,s2,.....,sn} chBoard[BOARD_SIZE][BOARD_SIZE], EX- Kruskal parent[v]=u;} EXP-8 set S = {sl ,s2,.....,sn} chBoard[BOARD_SIZE][BOARD_SIZE],
#include <stdio.h> else{ parent[v]=u; #include<stdio.h> int crntCol){ #include <stdio.h> else{ parent[v]=u; #include<stdio.h> int crntCol){
#include <stdlib.h> rank[u]++;}} #define BOARD_SIZE 4 if(crntCol>=BOARD_SIZE) #include <stdlib.h> rank[u]++;}} #define BOARD_SIZE 4 if(crntCol>=BOARD_SIZE)
int comparator(const void* p1, void kruskalAlgo(int n,int edge[n][3]){ void displayChess(int return 1; int comparator(const void* p1, void kruskalAlgo(int n,int edge[n][3]){ void displayChess(int return 1;
const void* p2){ qsort(edge,n,sizeof(edge[0]),comparator); chBoard[BOARD_SIZE] for(int i=0;i<BOARD_SIZE;i++){ const void* p2){ qsort(edge,n,sizeof(edge[0]),comparator); chBoard[BOARD_SIZE] for(int i=0;i<BOARD_SIZE;i++){
const int(*x)[3]=p1; int parent[n]; [BOARD_SIZE]){ if(isQueenPlaceValid(chBoard,i, const int(*x)[3]=p1; int parent[n]; [BOARD_SIZE]){ if(isQueenPlaceValid(chBoard,i,
const int(*y)[3]=p2; int rank[n]; for(int row=0;row< crntCol)){ const int(*y)[3]=p2; int rank[n]; for(int row=0;row< crntCol)){
return (*x)[2]-(*y)[2];} makeSet(parent,rank,n); BOARD_SIZE;row++){ chBoard[i][crntCol]=1; return (*x)[2]-(*y)[2];} makeSet(parent,rank,n); BOARD_SIZE;row++){ chBoard[i][crntCol]=1;
void makeSet(int parent[],int rank[],int int minCost=0; for(int col=0;col<BOARD_SIZE;col++) if(solveProblem(chBoard,crntCol+1)) void makeSet(int parent[],int rank[],int int minCost=0; for(int col=0;col<BOARD_SIZE;col++) if(solveProblem(chBoard,crntCol+1))
n){ prin ("Following are prin ("%d ",chBoard[row][col]); return 1; n){ prin ("Following are prin ("%d ",chBoard[row][col]); return 1;
for(int i=0;i<n;i++){ the edges in the constructed MST\n"); prin ("\n");}} chBoard[i][crntCol]=0;}} for(int i=0;i<n;i++){ the edges in the constructed MST\n"); prin ("\n");}} chBoard[i][crntCol]=0;}}
parent[i]=i; for(int i=0;i<n;i++){ int isQueenPlaceValid(int return 0;} parent[i]=i; for(int i=0;i<n;i++){ int isQueenPlaceValid(int return 0;}
rank[i]=0;}} int v1=findParent(parent,edge[i][0]); chBoard[BOARD_SIZE] int displaySolu on(){ rank[i]=0;}} int v1=findParent(parent,edge[i][0]); chBoard[BOARD_SIZE] int displaySolu on(){
int findParent(int parent[],int int v2=findParent(parent,edge[i][1]); [BOARD_SIZE],int crntRow,int crntCol){ int int findParent(int parent[],int int v2=findParent(parent,edge[i][1]); [BOARD_SIZE],int crntRow,int crntCol){ int
component){ int wt=edge[i][2]; for(int i=0;i<crntCol;i++) chBoard[BOARD_SIZE][BOARD_SIZE]; component){ int wt=edge[i][2]; for(int i=0;i<crntCol;i++) chBoard[BOARD_SIZE][BOARD_SIZE];
if(parent[component]==component) if(v1!=v2){ if(chBoard[crntRow][i]) for(int i=0;i<BOARD_SIZE;i++) if(parent[component]==component) if(v1!=v2){ if(chBoard[crntRow][i]) for(int i=0;i<BOARD_SIZE;i++)
return component; unionSet(v1,v2,parent,rank,n); return 0; for(int j=0;j<BOARD_SIZE;j++) return component; unionSet(v1,v2,parent,rank,n); return 0; for(int j=0;j<BOARD_SIZE;j++)
return parent[component]=f minCost+=wt; for(int chBoard[i][j]=0; return parent[component]=f minCost+=wt; for(int chBoard[i][j]=0;
indParent(parent,parent[component]);} prin ("%d -- %d == i=crntRow,j=crntCol;i>=0&&j>=0;i--,j--) if(solveProblem(chBoard,0)==0){ indParent(parent,parent[component]);} prin ("%d -- %d == i=crntRow,j=crntCol;i>=0&&j>=0;i--,j--) if(solveProblem(chBoard,0)==0){
void unionSet(int u,int v, %d\n",edge[i][0],edge[i][1],wt);} } if(chBoard[i][j]) prin ("Solu on does not exist"); void unionSet(int u,int v, %d\n",edge[i][0],edge[i][1],wt);} } if(chBoard[i][j]) prin ("Solu on does not exist");
int parent[],int rank[],int n){ prin ("Minimum Cost Spanning Tree: return 0; return 0;} int parent[],int rank[],int n){ prin ("Minimum Cost Spanning Tree: return 0; return 0;}
return 0;} %d\n",minCost);} for(int i=crntRow,j=crntCol;j>=0&& displayChess(chBoard); return 0;} %d\n",minCost);} for(int i=crntRow,j=crntCol;j>=0&& displayChess(chBoard);
u=findParent(parent,u); int main(){ i<BOARD_SIZE;i++,j--) return 1;} u=findParent(parent,u); int main(){ i<BOARD_SIZE;i++,j--) return 1;}
v=findParent(parent,v); int edge[5][3]={{0,1,10},{0,2,6} if(chBoard[i][j]) int main(){ v=findParent(parent,v); int edge[5][3]={{0,1,10},{0,2,6} if(chBoard[i][j]) int main(){
if(rank[u]<rank[v]){ ,{0,3,5},{1,3,15},{2,3,4}}; return 0; displaySolu on(); if(rank[u]<rank[v]){ ,{0,3,5},{1,3,15},{2,3,4}}; return 0; displaySolu on();
parent[u]=v;} kruskalAlgo(5,edge); return 1;} return 0; } parent[u]=v;} kruskalAlgo(5,edge); return 1;} return 0; }
else if(rank[u]>rank[v]){ int solveProblem(int else if(rank[u]>rank[v]){ int solveProblem(int
EXP-12 Queen's if(isSafe(row,col)){ EXP-WARSHALL(A) {2,0,INF,4},{INF,6,0,INF},{INF,INF,2,0}}; EXP-12 Queen's if(isSafe(row,col)){ EXP-WARSHALL(A) {2,0,INF,4},{INF,6,0,INF},{INF,INF,2,0}};
#include <stdio.h> board[row]=col; #include <stdio.h> floydWarshall(graph); #include <stdio.h> board[row]=col; #include <stdio.h> floydWarshall(graph);
#include <stdbool.h> solveNQueens(row+1);}}} #define nV 4 return 0;} #include <stdbool.h> solveNQueens(row+1);}}} #define nV 4 return 0;}
#define MAX 20 int main(){ #define INF 999 (B)-------- #define MAX 20 int main(){ #define INF 999 (B)--------
int board[MAX]; prin ("Enter the value of N: "); void printMatrix(int matrix[][nV]); #include <stdio.h> int board[MAX]; prin ("Enter the value of N: "); void printMatrix(int matrix[][nV]); #include <stdio.h>
int N; scanf("%d",&N); void floydWarshall(int graph[][nV]){ #define V 4 int N; scanf("%d",&N); void floydWarshall(int graph[][nV]){ #define V 4
bool isSafe(int row,int col){ if(N<1||N>MAX){ int matrix[nV][nV],i,j,k; void printMatrix(int matrix[V][V]){ bool isSafe(int row,int col){ if(N<1||N>MAX){ int matrix[nV][nV],i,j,k; void printMatrix(int matrix[V][V]){
for(int i=0;i<row;i++){ prin ("N should be between 1 and for(i=0;i<nV;i++) for(int i=0;i<V;i++){ for(int i=0;i<row;i++){ prin ("N should be between 1 and for(i=0;i<nV;i++) for(int i=0;i<V;i++){
if(board[i]==col||board[i]-i==col- %d\n",MAX); for(j=0;j<nV;j++) for(int j=0;j<V;j++){ if(board[i]==col||board[i]-i==col- %d\n",MAX); for(j=0;j<nV;j++) for(int j=0;j<V;j++){
row||board[i]+i==col+row){ return 1;} matrix[i][j]=graph[i][j]; prin ("%d ",matrix[i][j]);} row||board[i]+i==col+row){ return 1;} matrix[i][j]=graph[i][j]; prin ("%d ",matrix[i][j]);}
return false;}} prin ("Solu ons for %d-Queens for(k=0;k<nV;k++){ prin ("\n");}} return false;}} prin ("Solu ons for %d-Queens for(k=0;k<nV;k++){ prin ("\n");}}
return true;} problem:\n\n",N); for(i=0;i<nV;i++){ void warshallAlgorithm(int return true;} problem:\n\n",N); for(i=0;i<nV;i++){ void warshallAlgorithm(int
void printSolu on(){ solveNQueens(0); for(j=0;j<nV;j++){ graph[V][V]){ int reach[V][V]; void printSolu on(){ solveNQueens(0); for(j=0;j<nV;j++){ graph[V][V]){ int reach[V][V];
for(int i=0;i<N;i++){ return 0;} ---------- if(matrix[i][k]+matrix[k][j]<matrix[i][j]) for(int i=0;i<V;i++){for(int j=0;j<V;j++){ for(int i=0;i<N;i++){ return 0;} ---------- if(matrix[i][k]+matrix[k][j]<matrix[i][j]) for(int i=0;i<V;i++){for(int j=0;j<V;j++){
for(int j=0;j<N;j++){ matrix[i][j]=matrix[i][k]+matrix[k][j];}}} reach[i][j]=graph[i][j];}} for(int j=0;j<N;j++){ matrix[i][j]=matrix[i][k]+matrix[k][j];}}} reach[i][j]=graph[i][j];}}
if(board[i]==j) printMatrix(matrix);} for(int k=0;k<V;k++){for(int if(board[i]==j) printMatrix(matrix);} for(int k=0;k<V;k++){for(int
prin ("Q "); void printMatrix(int matrix[][nV]){ i=0;i<V;i++){for(int j=0;j<V;j++){ prin ("Q "); void printMatrix(int matrix[][nV]){ i=0;i<V;i++){for(int j=0;j<V;j++){
else for(int i=0;i<nV;i++){ reach[i][j]=reach[i][j]|| else for(int i=0;i<nV;i++){ reach[i][j]=reach[i][j]||
prin (". ");} for(int j=0;j<nV;j++){ (reach[i][k]&&reach[k][j]);}}} prin (". ");} for(int j=0;j<nV;j++){ (reach[i][k]&&reach[k][j]);}}}
prin ("\n");} if(matrix[i][j]==INF) prin ("\nTransi ve Closure prin ("\n");} if(matrix[i][j]==INF) prin ("\nTransi ve Closure
prin ("\n");} prin ("%4s","INF"); Matrix:\n"); printMatrix(reach);} prin ("\n");} prin ("%4s","INF"); Matrix:\n"); printMatrix(reach);}
void solveNQueens(int row){ else int main(){int graph[V][V]={{0,1,0,1}, void solveNQueens(int row){ else int main(){int graph[V][V]={{0,1,0,1},
if(row==N){ prin ("%4d",matrix[i][j]);} {0,0,1,0},{0,0,0,1},{0,0,0,0}}; if(row==N){ prin ("%4d",matrix[i][j]);} {0,0,1,0},{0,0,0,1},{0,0,0,0}};
printSolu on(); prin ("\n");}} prin ("Input Adjacency Matrix:\n"); printSolu on(); prin ("\n");}} prin ("Input Adjacency Matrix:\n");
return;} int main(){ printMatrix(graph); return;} int main(){ printMatrix(graph);
for(int col=0;col<N;col++){ int graph[nV][nV]={{0,3,INF,5}, warshallAlgorithm(graph); return 0;} for(int col=0;col<N;col++){ int graph[nV][nV]={{0,3,INF,5}, warshallAlgorithm(graph); return 0;}