From 0bdddd1c4734893810bfe5e46507b14ea99c2e05 Mon Sep 17 00:00:00 2001 From: banrovegrie Date: Sun, 6 Oct 2019 15:55:52 +0530 Subject: [PATCH 1/2] Created a cpp code for Floyd Warshall --- FloydWarshall.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++++++ a.out | Bin 0 -> 19372 bytes 2 files changed, 62 insertions(+) create mode 100644 FloydWarshall.cpp create mode 100755 a.out diff --git a/FloydWarshall.cpp b/FloydWarshall.cpp new file mode 100644 index 0000000..4facb10 --- /dev/null +++ b/FloydWarshall.cpp @@ -0,0 +1,62 @@ +//Constructed in C++14 +#include +#define INF 1000000007 //Consider that this is the maximum possible cost you can have +using namespace std; +int main() +{ + int nodes,edges; + + cout<<"Enter the total number of nodes: "; + cin>>nodes; //Enter the number of nodes + + cout<<"Enter the total number of edges: "; + cin>>edges; //Enter the number of edges + + int dist[nodes+1][nodes+1]; //Declaration of a dist as adjoint matrix representation + + for(int i=0;i<=nodes;i++) + for(int j=0;j<=nodes;j++) + dist[i][j]=INF; //Initialising distance cost to infinity + + cout<<"Enter the edges in this format: "<>x>>y>>z; + dist[x][y]=z; //Assigning the input values + } + + //The main algorithm begins here + + for(int k=1;k<=nodes;k++) + { + // Pick all nodes as source one by one + for(int i=1;i<=nodes;i++) + { + // Pick all nodes as destination for the above picked source + for(int j=1;j<=nodes;j++) + { + // If node k is on the shortest path from i to j, then update the value of dist[i][j] + if (dist[i][k] + dist[k][j] < dist[i][j]) + dist[i][j] = dist[i][k] + dist[k][j]; + } + } + } + + //Now we print the respective all pairs' shortest path distances + cout<(UW3ip{4sa3&X%wZ0&DRqmZ-3-38it@r_)Nh1L#zU2kCkTo)!Z?;oT@X+br_Bu4l)_$cgGwAw2}S*V z@4da-TS;KcxHIi&M{nQzeeb>ReeZkU`@g4GKmLzTFOnorp(J$|NRm_nH?T;Odb?L5 zBuT#wr^0Dk-JRQ%`;{HPL)84olMiP_#Agi((6pV(eLM4$u>5j9O%fQQNaVgGqBSk4 zcO(UX=jPY`WmE?AW0&wWgo|>?33NN5rX`Z8#zdCn=2vz#=l7IIVPiW(vEY}JkN9b= zdZb;CBaxfmgy8pc!GJL7J^Rd%uO$@H^p23;p45`TMmN91*Kqj`2nK}n_+=UMfTo2K z$#^*0BIs^@HP>=}%S59Rc0O+2nwE<04M&@_aI`swgl>LcUy-jr!fqZ;{$wZRC|lF2 z?%a8&BSz+Yn1K=*m_1~$cwoO-M_ALM5iQZ#))AzYqQZ{5428;+Lc$2(mlC zF}3A#xUmhAL_@<oZ47U{S)>I;X zYb4xwYg1>W378(@NpduQjwZkgD5y zoKp1%zC#(!t^=yk+c7;oZ9T`xsneh#X>U8x!l0QAlha3y*I4d%!7{BHud3d^nO6HZ zAHfVJsXgybRvYQ+wNo|5F_d#kHEJium6J?Nqqh}&RHJ`4yc(nTK6s{ba+5OY{r1<9 zVq7^v=}hGWBhl!shLn@4$ugjr7u6Tj1*-W3WmG*!5qV;~Xx~LI|M@25=^67F%8AS< z;xe4gNk%%EIY7zHEe)5ks=jimBw0Vjd_jup54?|A&3YNHapf3gLv8DrT*o#kr@j3& zS0e8vEN^PeYO*t?Ua;=VhDWR#gw5I!HIy1t%_CGn$orA{;yXEcKS1OQ#?rq<2`Vpv z$#*O>05q-~rYY7`4zs$i1Q=I_Icb=YeuL<7AwGJ_D9LlVKHUw#yk%lw>^=X!Ln2`==-T(>h@(>ym zjd&xL7uF)Yc$=2OQmqfM{NZpZ#lFilIz;M215~mG7-Cv1V=)K0Vh=JBt>mG!q0dt6 z!G|_8)AROL5l?f=uc?2e4q95a;3*h|6$La?LlDJMvN4?~z}iWr7`^3GVT1Gd0qb{x zf1!+lT*jr@j1v@d6^l7YEI+uIc#t9g9mRMkVF;zUZLpvBng2xOL9^@!l=azc*7s1j zb)0L)ms9^irt5>5cXH|4CJ-t|)RI-8ewMWxNJ#K~{EVG>D8cD>|XVaN0GSXm0nD^|^FOZA*U zE|fYxN{d-*B}7M&litxuE5?h5h>B&kGEhqZvYg;zcvp01>+{g*L4>m+7!4%$l-l2Q z$|^-(X5kEd3M=SSo@IoGm1l=M-d@_gX98p$Jj;mn(;^0hYA#aEN{C8Y8M1zfC__2O z@|()R)x*f#GbMX_(G*|+6&5N`p>iNYdlRlxhv{i<7AiO-%@jnp> z6e&Zy86ij4gmoHpZeL#B-mjtu(zIkfZ|7inp`R)Bp<{!{yz8ZGY1VUgq8!KTK=LkO zHu?mO`_>l7?KDW+-nc!&-mG2{LRe#!uz#|B#65h`Dv$SvV@{JE5cB^eWU1;C_L)MH zHo)>~Pt`yzeafq>F%8zut$)CDmR0vJ37EY9SG?%$Mc=cnU@Fr*G z3XBt7fKAs{2jxXaRZWIf;|R^MWJZs&mrs_c-7R1}8nkOO_osGS<`jer8VrOYb4m?d=^{SPuOU47Ov zbjr+j#PEa&U_Jx=Lu~v_mbZ6I45RyT48+yJ$I>3lWAv^8Bk%r4DTbOM!-kGWhzoDk zG;dYAJ*rs@YmYQ*4?0-l?Xeb7)}N4ujb65X>1WFr>lsF(8i`g}N#(#v{xRb?vzFgu zR)hiDzzApb%2YYtf5>Kcy@W*F*2g%`vHQt#q_8drWABpOc+C5UWBj+?Ku_ZRWM+R7 z{l(l??CdMv6?T8>InDXe_>K|XdJM&rftb$@KqlD5gCJywAvy}7*ijh)>n3OsBR&xf zmYnKt_EE;Zm%XDev+4VwF>E&4I@tV@cGX_MpF+>cVa%Yp03-CLTS>q=UjXK?whcuyFTT8swFW%Uwz+t9$Mm= zvhq0E$ND}qv2p7$@@G^ir(b3pFfsEFm!l-eMKd+RreZnkB;=WCPuS#~75{N)o$S^* zpF=;c`jM@F#1p>IS{F(hIu&8F+9%Z{U_>?vxea znwk((6q}?cRHGQu`ox;VGHTz3#aPx=7=hjW@hs$_F1l^aZ1!PveS*Q zJl0J}|FAOd9UVhW>qJe{M(xjtBjd)>3bk~ltwC@QGfTsWHTv=N^c?nX27Z^igcu5~ zD9JNpxXJYoXMM0TqiT6EEll5A&ShgWK(78w-}d;vS6+f4K9VhAdiAGRbWE?Ni?!+1 z1?*kK-d|#G+=+qyW%gdm-pkm#guO3i@5|WxE9^~udwTVi?0q$RU(4Pydtb-itJwPn z_Flu@H?sH5?7fb?eR$XOU$Yj%-B~}q`d;`0tzUuInRn2@ty?MdGYZk=SLSsJjZo+W zg$mJ9?7*e<4hkJ6S{H@>nnFh?G|1AyIx~Mpp}Q&c2!-}hXdi{XOQ8-5y+xrYg$f`? zrinsVQs{mPl~JgULOUpQH-#XIl-W$7ZxF4NLOm3sby4e|Qs`QQpsOdhcuKEY{APh? z?OzuBTY=|v!QwN8p6LRj^cCJ9NzW86eXUS>zEGB=e=b~vxVH*dIj(u8pIqs=LOKos zj~9Fm>+7EsE&kR1$yenSSzOPw{n&70*pKOVYP&+BKfbrRyc>`W2dV7s_c} z{6`+o11s%ZN;Ij*+-lEG+5PsojWa<8sOWqpqx@08nv;hf--912F|D8(R|9M^-PR=r7Xj>p<$ zsY-AV5LK5Y83IFPq)S}yvinZxpW!tE3wWG2K?4gKSkS$7n4b9U4A-PsF0ZNI2Q4?eR$imx2qvvJZy7sfAj&HbnGjOR`m|+aAhGS6ZfN?WrW>4aS2ZoN8$a{ehH@gQDutJ@uNKjiM+! zh`hcrmsI7XZw$rC6O8rKyZhL*1)+TjVI^~Tds?VNRXeV*n08Sx%pgbVO z%So*b{M-8-dLq@PLxJ&1-j3UOLvDz~Lcxe$kxJ-VGmguWB&JW}%_YUvyu{_7EOfF|FyWDY>mhEat)2mo<9(Z=)t)14XXYGPg0+(KnHCLM}tY7nd~V>*FqgZ ztx<0YM>UvYsFiZ0b1~=_5&U#T?`YT2zcC(3aVrlHIZ_mkfG*K2q^> zxbvYe90$eu??(cU34A*~OrZEWaSr_;@U@<9cBW3}#gleCJ}o9(h3j%k-z{)Z;6Z_( z5V!>QN|gS`0{aBM80YWAf49J^fr($cz*Pbd3jA$>hXp<)@Pxp>5V+(DUY-x%*bu); zfjb3m7x)Q*2L*m!;0b}>5_nSJ)r&blA8y&HK92}oC-AQX9uT+*_X<@0n7~g9oEG?~ zz>@;MCoug$iTK}+`)A5uC-5Tz4+#9Wz{3J>!TklLPYe840@IJPh~Ela##4NWz;y!q z1da<#cPEtoxWIz~|3=_3ftN26{KWl5t-!+q?-w{N@b~QW;$CBnFl>djz)cRp=g?(%bhVZwhSRhtRh*UJou$ z@KFAn8RmCRgiGaOke8h!6ap7`Yayj|6 zxp0>Y(-(5i^iR9+3oiU?7rq2-=gd#H&rTe0;Tjj-<-!S$Q7iuRy6^!P9(3U$7cK*v z0Ne&RvW<0cx590ND~GFqyA5s=+-A5faJR$JV0jnZR=6rSKb!)0H{3Qj74EBWHE^|X zcq-|0l1jKc;i}=b!;$^{Z^%v@)+*gw~7*;W3zW^^s@ z=b3#D1$}l^*@8Y-Am9Gyu-N(M2>JW|9NoDE$WgNvb#`n2Su$o9{fNt7?c-pcjUm>h`xVzQV0tS?Pz`kTNwIiuq7cX zDO6O!Pd0D{GDq#on!}MuexBJYJG+z{$e8q|Jk5S?ndR77!W@%2HoRoOkzlk1`%>&& zvpZgg(rWwx*fciR(NrXY|9PM#^Tn;m(nEXdc53YKDUdzT!GRUpY>vv~6o;FH&{j^B zd&5mQKg+Y1v*Z~_z?7nN^cHbcVt!K$YyhWAWV5!#&+DYBtSOib=2gaBQKzUmeWLhU zI#`4LaSDOckzDU_Br2UV(L5_%YFC<{_W3u$L}G32aXpdHo6u*&an{E3QU$6K*V~o) zfTo~!dF^|liYd)2rnGcMZ8SZix1D#DYQjFHrqQP;ThG40{1eTZupb=!GdSd>a&fQm zV;D`ww0Ll@)*iztwjQtEj?+ Date: Sun, 6 Oct 2019 16:12:16 +0530 Subject: [PATCH 2/2] Added Prim.cpp Added C++ implementation for Prim's algorithm --- Prim.cpp | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 Prim.cpp diff --git a/Prim.cpp b/Prim.cpp new file mode 100644 index 0000000..dda7590 --- /dev/null +++ b/Prim.cpp @@ -0,0 +1,89 @@ +#include +#include +#include +#define V 5 + +// A utility function to find the vertex with +// minimum key value, from the set of vertices +// not yet included in MST +int minKey(int key[], bool mstSet[]) +{ + // Initialize min value + int min = INT_MAX, min_index; + + for (int v = 0; v < V; v++) + if (mstSet[v] == false && key[v] < min) + min = key[v], min_index = v; + + return min_index; +} + +int printMST(int parent[], int graph[V][V]) +{ + printf("Edge \tWeight\n"); + for (int i = 1; i < V; i++) + printf("%d - %d \t%d \n", parent[i], i, graph[i][parent[i]]); +} + +// Function to construct and print MST for +// a graph represented using adjacency +// matrix representation +void primMST(int graph[V][V]) +{ + // Array to store constructed MST + int parent[V]; + // Key values used to pick minimum weight edge in cut + int key[V]; + // To represent set of vertices not yet included in MST + bool mstSet[V]; + + // Initialize all keys as INFINITE + for (int i = 0; i < V; i++) + key[i] = INT_MAX, mstSet[i] = false; + + // Always include first 1st vertex in MST. + // Make key 0 so that this vertex is picked as first vertex. + key[0] = 0; + parent[0] = -1; // First node is always root of MST + + // The MST will have V vertices + for (int count = 0; count < V - 1; count++) { + // Pick the minimum key vertex from the + // set of vertices not yet included in MST + int u = minKey(key, mstSet); + + // Add the picked vertex to the MST Set + mstSet[u] = true; + + // Update key value and parent index of + // the adjacent vertices of the picked vertex. + // Consider only those vertices which are not + // yet included in MST + for (int v = 0; v < V; v++) + + // graph[u][v] is non zero only for adjacent vertices of m + // mstSet[v] is false for vertices not yet included in MST + // Update the key only if graph[u][v] is smaller than key[v] + if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v]) + parent[v] = u, key[v] = graph[u][v]; + } + + // print the constructed MST + printMST(parent, graph); +} + +// to test +int main() +{ + /* Let us create the following graph */ + int graph[V][V] = { { 0, 2, 0, 6, 0 }, + { 2, 0, 3, 8, 5 }, + { 0, 3, 0, 0, 7 }, + { 6, 8, 0, 0, 9 }, + { 0, 5, 7, 9, 0 } }; + + + primMST(graph); + + return 0; +}