0% found this document useful (0 votes)
2 views1 page

ADA2

The document contains code snippets for various graph algorithms, including Prim's and Dijkstra's algorithms for finding minimum spanning trees and shortest paths. It also includes implementations of Kruskal's algorithm and the Floyd-Warshall algorithm for all-pairs shortest paths. Additionally, there are references to a chess problem involving the N-Queens solution.

Uploaded by

cmrit146
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)
2 views1 page

ADA2

The document contains code snippets for various graph algorithms, including Prim's and Dijkstra's algorithms for finding minimum spanning trees and shortest paths. It also includes implementations of Kruskal's algorithm and the Floyd-Warshall algorithm for all-pairs shortest paths. Additionally, there are references to a chess problem involving the N-Queens solution.

Uploaded by

cmrit146
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

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;}

You might also like