diff --git a/Backtracking/Graph Coloring.cpp b/Backtracking/Graph Coloring.cpp new file mode 100644 index 000000000..fdf50b288 --- /dev/null +++ b/Backtracking/Graph Coloring.cpp @@ -0,0 +1,81 @@ +#include + +// Number of vertices in the graph +#define V 4 + +void printSolution(int color[]); + +/* A utility function to check if the current color assignment + is safe for vertex v */ +bool isSafe (int v, bool graph[V][V], int color[], int c) +{ + for (int i = 0; i < V; i++) + if (graph[v][i] && c == color[i]) + return false; + return true; +} + +/* A recursive utility function to solve m coloring problem */ +void graphColoring(bool graph[V][V], int m, int color[], int v) +{ + /* base case: If all vertices are assigned a color then + return true */ + if (v == V){ + printSolution(color); + return; + } + + /* Consider this vertex v and try different colors */ + for (int c = 1; c <= m; c++) + { + /* Check if assignment of color c to v is fine*/ + if (isSafe(v, graph, color, c)) + { + color[v] = c; + + /* recur to assign colors to rest of the vertices */ + graphColoring (graph, m, color, v+1); + + + /* If assigning color c doesn't lead to a solution + then remove it */ + color[v] = 0; + } + } + +} + +/* A utility function to print solution */ +void printSolution(int color[]) +{ + printf(" Following are the assigned colors \n"); + for (int i = 0; i < V; i++) + printf(" %d ", color[i]); + printf("\n"); +} + +// driver program to test above function +int main() +{ + /* Create following graph and test whether it is 3 colorable + (3)---(2) + | / | + | / | + | / | + (0)---(1) + */ + bool graph[V][V] = {{0, 1, 1, 1}, + {1, 0, 1, 0}, + {1, 1, 0, 1}, + {1, 0, 1, 0}, + }; + int m = 3; // Number of colors + + int color[V]; + + for (int i = 0; i < V; i++) + color[i] = 0; + + graphColoring(graph, m, color, 0); + return 0; +} diff --git a/Backtracking/N Queens.cpp b/Backtracking/N Queens.cpp new file mode 100644 index 000000000..f070c5803 --- /dev/null +++ b/Backtracking/N Queens.cpp @@ -0,0 +1,82 @@ +#include +#define N 4 +using namespace std; + +void printSolution(int board[N][N]) +{ + cout<<"\n"; + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + cout<<""<=0 && j>=0; i--, j--) + if (board[i][j]) + return false; + + /* Check lower diagonal on left side */ + for (i=row, j=col; j>=0 && i= N){ + printSolution(board); + return; + } + + /* Consider this column and try placing + this queen in all rows one by one */ + for (int i = 0; i < N; i++) + { + /* Check if queen can be placed on + board[i][col] */ + if ( isSafe(board, i, col) ) + { + /* Place this queen in board[i][col] */ +// cout<<"\n"< +//#include +#include using namespace std; + +//void Print(int res[20][20], int i, int j, int capacity) +//{ +// if(i==0 || j==0) +// { +// return; +// } +// if(res[i-1][j]==res[i][j-1]) +// { +// if(i<=capacity) +// { +// cout<res[i][j-1]) +// { +// Print(res, i-1,j, capacity); +// } +// else if(res[i][j-1]>res[i-1][j]) +// { +// Print(res, i,j-1, capacity); +// } +//} + int Knapsack(int capacity,int n,int weight[],int value[]){ - int res[n+1][capacity+1]; + int res[20][20]; for (int i = 0; i < n+1; ++i) { for (int j = 0; j < capacity+1; ++j) @@ -15,9 +42,11 @@ int Knapsack(int capacity,int n,int weight[],int value[]){ res[i][j] = res[i-1][j]; } } +// Print(res, n, capacity, capacity); +// cout<<"\n"; return res[n][capacity]; } -int main(int argc, char const *argv[]) +int main() { int n; cout<<"Enter number of items: "; @@ -38,4 +67,4 @@ int main(int argc, char const *argv[]) cin>>capacity; cout< using namespace std; + +void Print(int trace[20][20], int m, int n, string a) +{ + if (m==0 || n==0) + { + return; + } + if (trace[m][n]==1) + { + Print(trace, m-1, n-1, a); + cout<res[i][j-1]) + { + res[i][j]=res[i-1][j]; + trace[i][j]=2; // 2 means trace the matrix in upwards direction. + } + else + { + res[i][j]=res[i][j-1]; + trace[i][j]=3; // means trace the matrix in left direction. + } + } } } + Print(trace, m, n, a); return res[m][n]; } -int main(int argc, char const *argv[]) + + + + +int main() { string a,b; cin>>a>>b; cout< +using namespace std; + +Multiply(int A[][], int B[][], int n) +{ + if (n==2) + { + int p1= (a[0][0] + a[1][1])*(b[0][0]+b[1][1]); + int p2= (a[1][0]+a[1][1])*b[0][0]; + int p3= a[0][0]*(b[0][1]-b[1][1]); + int p4= a[1][1]*(b[1][0]-b[0][0]); + int p5= (a[0][0]+a[0][1])*b[1][1]; + int p6= (a[1][0]-a[0][0])*(b[0][0]+b[0][1]); + int p7= (a[0][1]-a[1][1])*(b[1][0]+b[1][1]); + + + int c[n][n]; + c[0][0]=p1+p4-p5+p7; + c[0][1]=p3+p5; + c[1][0]=p2+p4; + c[1][1]=p1-p2+p3+p6; + + return c[][]; + } + else + { + + } + +} + +int main() +{ + int p,q,r,s; + cout<<"Enter the dimensions of Matrices"; + cin>>n; + int A[n][n],; + int B[n][n],; + cout<<"Enter the elements of Matrix A"; + for (int i = 0; i < n; i++) + { + for (int j = 0; j >A[i][j]; + } + } + + + cout<<"Enter the elements of Matrix B"; + for (int i = 0; i < n; i++) + { + for (int j = 0; j >B[i][j]; + } + } + + Multiply(A, B, n); + return 0; +} \ No newline at end of file