From a7b882aa8b7fc48f527013048db62cc7636ba287 Mon Sep 17 00:00:00 2001 From: skywalker2207 Date: Sun, 4 Dec 2022 11:39:58 +0530 Subject: [PATCH 1/2] implemented greedy graph coloring in c++ --- .../greedyGraphColoring/greedyGraphColoring | Bin 0 -> 27392 bytes .../greedyGraphColoring.cpp | 181 ++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100755 graphColoringAlgo/greedyGraphColoring/greedyGraphColoring create mode 100644 graphColoringAlgo/greedyGraphColoring/greedyGraphColoring.cpp diff --git a/graphColoringAlgo/greedyGraphColoring/greedyGraphColoring b/graphColoringAlgo/greedyGraphColoring/greedyGraphColoring new file mode 100755 index 0000000000000000000000000000000000000000..300e973589d5a87f99a45262f3e2bac6cdd9e923 GIT binary patch literal 27392 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 CEnYhS literal 0 HcmV?d00001 diff --git a/graphColoringAlgo/greedyGraphColoring/greedyGraphColoring.cpp b/graphColoringAlgo/greedyGraphColoring/greedyGraphColoring.cpp new file mode 100644 index 0000000..9ee4006 --- /dev/null +++ b/graphColoringAlgo/greedyGraphColoring/greedyGraphColoring.cpp @@ -0,0 +1,181 @@ +#include +using namespace std; +typedef long long ll; +typedef vector vi; +typedef pair pi; +typedef vector vii; +typedef deque dqi; +typedef queue qi; +typedef priority_queue pqi; + +#define ll long long int +#define ld long double +#define mp make_pair +#define pb push_back +#define ppb pop_back +#define pf push_front +#define ppf pop_front +#define all(x) (x).begin(), (x).end() +#define uniq(v) (v).erase(unique(all(v)), (v).end()) +#define sz(x) (ll)((x).size()) +#define fr first +#define sc second +#define rep(i, a, b) for (int i = a; i < b; i++) +#define mem1(a) memset(a, -1, sizeof(a)) +#define mem0(a) memset(a, 0, sizeof(a)) +#define in(x) cin >> x +#define tc \ + int t; \ + cin >> t; \ + while (t--) +#define no "NO" << endl +#define yes "YES" << endl +#define sp " " +#define speed \ + cin.sync_with_stdio(false); \ + cin.tie(NULL); \ + cout.tie(NULL); + +int npower(int x, int n) +{ + int res = 1; + while (n) + { + if (n % 2) + res = (res * x); + n /= 2; + x = (x * x); + } + return res; +} +int modpow(int x, int n, int M) +{ + x = x % M; + int res = 1; + while (n) + { + if (n % 2) + { + res = (res * x) % M; + } + n /= 2; + x = (x * x) % M; + } + return res; +} +int gcd(int a, int b) +{ + if (!b) + return a; + return gcd(b, a % b); +} +class Graph +{ + int V; // No. of vertices + list *adj; // A dynamic array of adjacency lists +public: + // Constructor and destructor + Graph(int V) + { + this->V = V; + adj = new list[V]; + } + ~Graph() { delete[] adj; } + + // function to add an edge to graph + void addEdge(int v, int w); + + // Prints greedy coloring of the vertices + void greedyColoring(); +}; + +void Graph::addEdge(int v, int w) +{ + adj[v].push_back(w); + adj[w].push_back(v); // Note: the graph is undirected +} + +// Assigns colors (starting from 0) to all vertices and prints +// the assignment of colors +void Graph::greedyColoring() +{ + int result[V]; + + // Assign the first color to first vertex + result[0] = 0; + + // Initialize remaining V-1 vertices as unassigned + for (int u = 1; u < V; u++) + result[u] = -1; // no color is assigned to u + + // A temporary array to store the available colors. True + // value of available[cr] would mean that the color cr is + // assigned to one of its adjacent vertices + bool available[V]; + for (int cr = 0; cr < V; cr++) + available[cr] = false; + + // Assign colors to remaining V-1 vertices + for (int u = 1; u < V; u++) + { + // Process all adjacent vertices and flag their colors + // as unavailable + list::iterator i; + for (i = adj[u].begin(); i != adj[u].end(); ++i) + if (result[*i] != -1) + available[result[*i]] = true; + + // Find the first available color + int cr; + for (cr = 0; cr < V; cr++) + if (available[cr] == false) + break; + + result[u] = cr; // Assign the found color + + // Reset the values back to false for the next iteration + for (i = adj[u].begin(); i != adj[u].end(); ++i) + if (result[*i] != -1) + available[result[*i]] = false; + } + + // print the result + for (int u = 0; u < V; u++) + cout << "Vertex " << u << " ---> Color " + << result[u] << endl; +} + +// Driver program to test above function + +void solve() +{ + + Graph g1(5); + g1.addEdge(0, 1); + g1.addEdge(0, 2); + g1.addEdge(1, 2); + g1.addEdge(1, 3); + g1.addEdge(2, 3); + g1.addEdge(3, 4); + cout << "Coloring of graph 1 \n"; + g1.greedyColoring(); + + Graph g2(5); + g2.addEdge(0, 1); + g2.addEdge(0, 2); + g2.addEdge(1, 2); + g2.addEdge(1, 4); + g2.addEdge(2, 4); + g2.addEdge(4, 3); + cout << "\nColoring of graph 2 \n"; + g2.greedyColoring(); +} +int main() +{ + speed; + // tc + { + solve(); + } + return 0; +} \ No newline at end of file From fe4c84fa72ba8853e647461dc4ccd5b5600e9b07 Mon Sep 17 00:00:00 2001 From: skywalker2207 Date: Sun, 4 Dec 2022 11:41:27 +0530 Subject: [PATCH 2/2] implemented greedy graph coloring in c++ and removed executable file --- .../greedyGraphColoring/greedyGraphColoring | Bin 27392 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 graphColoringAlgo/greedyGraphColoring/greedyGraphColoring diff --git a/graphColoringAlgo/greedyGraphColoring/greedyGraphColoring b/graphColoringAlgo/greedyGraphColoring/greedyGraphColoring deleted file mode 100755 index 300e973589d5a87f99a45262f3e2bac6cdd9e923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27392 zcmeHQ4Rl;pwZ4-yZNS>3wLqjuhu>EU9WqJ!6BI~jr`$l=#wNka11^)9Ni#5+2{U)v zghjEKqKs)YJPK4q1)t9!1ntwJ1*L?)rXpg&iWNZvwmP9vYpf6vnfL8;_PKNCb|!6E z>;0_tdb%e2p8a?B*=L`9&b@Qz^b@|urA026rb@APkw&$;84^>c2my5gnzl%LKmNM4 z+1g~FC*f1aWGCEHBnb+ZGG8$u$yLxr9(amGYYHk036fl)QvQBPQBW(Fb&@NgORhVi z{{+dWprTvtRZ6<%fbrucUO~GY`KI(jNiSWN3(L9R-NGo)*e-Gx$+=n1&2kEsvp*G7 z{v@B!XA$dlLWkL!Q?7&MoNx(rQc;lFpwhh048E84npkcV8{~weJkScN_C5+Z^2?DH zcBi(I+bc8<$-6~NzFz@B@-pKn|!&z$Zw2K77enXb*!uKlPaR*)emZvhg%u1VI*8Lt_} z>dsiyNSOY(X&9Q((6Y=3hT@^s;e;8Aw=7#6iA6&#{@hD?7r;+=0a zVo;1|EEp0VS!gUXI%2WweND}kp84A1RjcYRX)wH=YTKo! zRt7)?_^|Us!hSC6rbbpacRfn;}SSYrP?)^V`|PCBKWFVwz7)pxFtaqg21M(&;SpF?S#QJh7Ff`3v*8g~ zRvED2r&?G|+ib%lu&r{R4L{AoYT7q!_%a)Qiw!^BhTmqxb7%_cpbdYbjsMu?F%SHI z^1xrqPJLVN9WB-SN`7@Q($B4fW>IFB-uravQ^F0I`7?kX%bfKAfU?;d@plkqY~-~} zCNm)Fl&Ho=Ua;zvpvFd?uXQGdu$ z{|`s~i;nu8j(WeNeyhFi{bNJwg=_TG>w53r15GVH@1Xa`djEyr!!Tt|NPzQTyQggS z1~?G`)_>vs!07!Y_YkNZH%~z5T|w6fz2h>&WwX~4-%||1e}mwke;t8y-qlkF^e6sw zvHrw(vF_TTzwoX(6AI2^1*Mtcb}d7bGnC;s2!g$J;?(>b7eP=M`8|__}){@VI@9L*WZ&q8XbuXAc|JJ&_ zsn$`Yy2esHja5sA{OVa)G_fP62~6+u)Vg<4$?@KG<65!=#Qihz2NL6bzVXycsiE{P z>fw(qt4Ksots74z52jiV=-|@(^wK`xK|QcbPwmoOgSu;%{={&x-apf&_xld$sU3Ri zm+1=3ye#*D0^A3g`wh%nG%9ik`J(<~^;gul*0(gH`3^nxST~Fc>V1>Wnj?nHx6?bQ zr-t>^Q+nU6MC;S2f!;SwieP#PzQFN5u8!M`b7BlmEF+qOZQe zA>VCe!T#xbU+Z9>?>2q&j!8vYukSW{cW%4swISa|>iWnq{vvWV>xjNt$Q0a78D|@* zuQ_q%+DVL4i81BdyuV3_4g=FyPHuz``z8(aj%Uj59NaKyo~}5yJ2=QbVH^dnXukVM zn|~Dx5t_eG?{CG2gkK`7WFbi;tYx$OIsipst}hzv2a*EeAI z#=uQ4?{^Kz5I~P#>{~XFnu@vz?ui{yEG@A);+Mco?1+aQ9F`-jafp%DBWZp&R_HvA zI1cj45xp2^*43xg`ZktroQ6C*D4>2!t%-iF{^n`TVCOPWF{?e%T48?x!94SMPo^7_u8 zey+?dW=VQ4Y3&c~`PcfZ>aVW9rryY=Xi7(m?0G1SJk;+S+)mpTGCP9(4Iv(-z}`;% zBkY#9Nh7ed8?vzX5`itb1NSo0rvc%G zq4ZDQl4cOo9a40cW%+lZ6gKY4wfs%;BVltaAI`xl8=qBJVU5CW&A}?mzof9Dmn1+& z-6pUlf5u(5wEUa%C1JX>9Eo5k{VNuw>n}*72kH8Abd7Z~JCqmfucoz?Rta>0c&-P} z{wZ0c5WIo}Q+tU1L9~N`H>{8u^o5aS}0GEFDpP9@y zbW6(ykA3ld$Cdo>E$a|y*o#ylsAZrIrMs!^{*s;=GU-WN4U2|$=zS%v0ymWY+uw55 z=k289aq@Qh4kR60b6B+XRPq3Pa^ULh%Bt3Lpg|r=lke>-FRk@R2lx=Z33mgu;xkN@ zi|SAvEiKxBtufvuD6P-Kpd76Z`X>)Ve;QqxNdB`9d9_!lfcbk;$=$GHPhacqRC%9o zw;tG|Z)=sMM6Z2n?FVSIY2UI(>|1&VOZQLFhX&CkvdK`o=3pk%kb1fyb;_9y{Y%a) z)%%-)|9L~|nf>LBsXwQ6@HO;4Q=#|ncj>qOx@Uhwe+#(KBKd0oH%t{Gb!5FmX@e|F zg9)FyQrh6&C@VTiN+j(VkhgOdyZ%#4ze5Jyzt1A&6%~V)RW0-2 zQuGcfkHXv9Z8>9N8@vnEZ@3x(K_yYp2R*S8!duM%sLE$oN#j96`I9R0T)%ngj~B3 zN;H?{I4;QJK}=wK3{--D5BTwcMqhe=i||?sE<+Asq`0KG5aUF-f#QBB{d-Y=5>*VN zxC0QFJ~52o5R33XiHQVied**^1{`rk?Wd8lhOvp4c0ljnExjNKC2wb2M(eHM7U+K3 zuw#_1HIpJQr-f`nBss)Ed7%u}OLqZSi-k+=qnG0`_O5N@RF)HCtO8hA_c3XVr7MS% zytwRuSb23B?;m!sTTNNxML9)>!?wX;TkOG3TarE>&_n4t(1L-q>X(QN=i7kP3^2{znXK@!!Mk!s{F3mfm3*}&_FAFHaho4HFUxSF;@yGZJI(Kd#$ zl~!bHc76KKG)lSICudxmDB=(3E{>$8f@6d>mY|L7DlMWNp3farw?ZSRkPGRvjN%zl zDmp#`I&z{!jSN_45fD?vC@7aw`&h$qS%G)ejcjBor)Opaa;UaVP=a{M}yQQ`&~b^ zO1&3Rp86x@PMdJK<$X3y-e^nL$6$bs+iKkMGsXBEXh4&>Nn!6hxaF@v!^6lmkJA<= zU4pG!s$w8tY*~xHt*3{MAVv*YjY7ZHccAR_yquAul z#UG3}dY|Kwq4W(P!1MB%AUaW+eTqt6KUR);;Ft%FdEl4_j(Omi2ab8*mv z&AZ6$UL1?W;%-fVaCEgh*6v;%_jh%;z3$_+;}1nw0j;@a6@NGlBj}sjjla!gPJvzu2`h%l;1a-_0NVlY1?&d=5#Yms zuK@lI@EyQ60Z)OS7vV|dM*y1uuL4x>+_`RCskyq#U9+Z6DILJr6P|wiaUaJ2Y(QsneTE%5$?^|2CUc30@3+7gzc{;I^{8jig{RVu5;6iv4 zA02r63wG4jMtpvNIKg))n&z8U{;8tH@1ML32BAvy2l4qf=(7PW`W0FFb4olFOqhiqKIIa z1Kc9ecY=O5=9cBlWuGhl?4a70fK(7S-47kRaslXt=GS>lr&lp7|4Z|Q z{zlNxhWsb&^rAJE{gnSd1-d_nE)5X<2Yn~#r`qYQS^FLYeFx~L+vy+A(w}4bLiUY< zz76u?{bS|7hOGQlgx&+7&$a9KOS&64im$DppO5QF52K=Vv}biRLC50-+8`ZWpnn(i zALH7Rr@8mTtPWa-R$+b2X9xL-)~7bm3;BuGt!qIS@7pRHFU#tu^{g56D!UEgEPW={ zt9H-}#Ze9D*MWY4UH*owd<*CsK)={dmti2{#034{LC4EqSs$2L`Awh?f?jBxw}Sp8 z=!M2{H|Sd@(0>s07eM#e+Ye>ir*-r2{YB90?eZAI1XR%Yw19pPbn(8t^8bpg zeiQUj(4%(wB5450Zvwpz`>QK*=yD+x;}7~8&_8IWH%a}3%4A$8&cPU8^i9|E#oD-Q zv+I#!?GMGkfINgE7 zXGwyXGq_a0o8h0uSicz&Yd7fXcQQ2JsL&pi%HQ72#0YM|T1o|zN|X-d6e3AyF)*t>=!@{+S9=fGFxWFaxYu;p@0zWp@+HW6Lj! zYG14&z$m_dWMu!qE>QRyQuKE{3ud^k?8NPipkKyxyeA~;SZe=UiuxV4Q+XxdWXP9f zaNoi8YZ-PiT+eWT;e8CZFdSsKi{UWC0}S!wN>R!gy6r!9aT;|Lb@h8IC4yhhUErS6 z+Lnx(Nw*iji}O^@^Cm^rdvjHlr?Tc8Mk|T@kcNGd_Lq#4O2b9JTi(b6>1GDnGvwo^ zI4RP~wJ!UQw}5jq{yqnu?vaRJ&0|zWX~16>exKUCQr0;vwN`;Y$(nbPs%bajg7m2T zpzyZ|{u8ZvtngpQMLzo<7yL7{(n`sx+I^Mr$2su-VEpk8{A>uiv>Dp_9Qca`ewNnb z=+|=QpUV7dUL+Y`?!eRUze)d02mUF>S2*x*F#Z$=eg+Z;>2W*obl*n!GaY!!r-Yy5 zz;9suc@F$TjIVUyf6n+C2mbGjU*y1_f%v0#KjOeIXMCLlPtSgcUuV3^TlWA@ak7dN zy4X8m44-AZT31y5FBIqdg#MXYli1wKSW$oT#noTIkGoe*oui<5Cu5*p$nws7RVMHs zwDP;+KMQ!r6cVI`z@LtOUBro6+?#@Obpig*Gr!3T*KBTJ8{A;hnzh?)OF~1M^eEz?V z`G3Q4rTjL)_#KQ;_=gJU`L*EZ#%$nC*5mY>7YjMr`Sux-S=n|CtY-XGtoUNK=kvgm{%+PEVEoq@KaDp&;&~KkKV&`ca(~4$Kj8nsc<1=e z!h&}i>{P!K2Ae1gfv5hCaXhQ}MZe-E{JU(w^20sA&nTL%sr@9Y(e5L>s@ULT1@LdO z{viARe3n^+eOo>~*8@-XY~^|SCFbv8e2ruNeyf0!(mrN2|L zucUVO^86L|tl&Qb^O44@j*UH=?YRp4`Ru>10RFoL@I&10n{4MNSpUHS{L``VCwn$< zoQUU=keLTO+27*uPc!4+bW6o*9+^T9H)aE$BYYA5l-rQFyp#1f{q{WYG%uX_?Pcb7 z=Fc?azsB+KV{WDjH!x)X8n;CF8Gj?=pW|^+`}s$K&v*XEF6RF#PegT}^GD#xZ?kw| zq-U^H-eP{I-#&zKr@ZaV!*d0GmbQMSlvjVx2cGP|j@zwe!Yal)*R`7&?~L<}jK6^W zGne)JjPaWs3IFuum2r=9W6b+DK5YuTSl|MwX0%(wf1S3K-80saBJ+m7Jtlfayh-vcDs|5eT# z+&!%k_c`%^JD@1E3D@Zho5I4@IX4G{0s18|5Wyy zimPw|eyuqWH@zO5^kVqi!iMQztpSlRlkM%EfR;Vr$1ppM03Gp@0B0~}td7Lm{1GE) z#^MRXpX}BGvCghY$P5K>TuWXKIxHq^_{GsUp{N<}(c0tw&X5sIc6Rna#8xxFY38u5 zj)y|Qo=fSgXZ5ACC(zYJhuJJJjIM+ksSS090!cF*i&m}iHdZG>H_&-M1*l#AcwuTS zs75k6p@#Vuz1eKU$vfc~nM@7V;*6kZ5{KV(H&%J+NS=0oGGZDyVCZ_ID;5a{dPK`O z31~i!ND6fufmjrW<3!CwqqjN~kH_M`L?Spir!b$F`OKcK3Am~xS11wiPsGNJw&8r9 zc&Pobjkd+XcvvpDFcdv37wMXy12wV(IHBnrNKe~DXb;t(czmJ$Ve zvxzgb5awR5w^ANBMW=5ygq!^hVV}=Bfa^%lrLwE{;B2Ox7HT3m&`POZT*YU5`RP0@ zZkrCf%57I!mm|AG%2uxq1j#Q~E}t)Q3Zu~{Z;k9r7>Anqk=&pY?KOd74cH;)Yl#uf z&Ure?2!!^Ij_Aj*Q_sF6&Bg4FEMbcM$m&E+{! z%|52GKUpU(v>j5`5%OcD;UmqK=e6Dc(NfOQwqvOIvaOE3n?@rv3G@qET0AOYZjV?3Zkhh0Ef3t5%RFj9Nz2{T$ zay@W#V`)vSe6ygdi~3^(6EUL$>4%Q_%h8_C6AR!8^!I2T!LxBeXDo;e7Pe2+g>bAd zh%7IW_E~voK+!-@;*{+lRa8@&Sn@Fs7DP{hGye{g|5RQIV^@@oU6qp*)t)iEUYNT& zB+u<5lWD&Mk2?<5v*H*h;E6Ck!lV40fiZFV7RGcX*_ft7vI&}QHV<>?p}j>qd=J*j zYzu#g+Nf`Y;Pra&(0FVe|STHO+mUO_#st zLm%yag9SJM(t#0YXx3$qJj6MNA`+Af@6r*EorF&*l8l)N=^)2;T~ z%8wJZV#^@8>vAoc#|DR!f#WntYcLVfY8#D+JHoVyXv&V4(Xwo@+UBTm%Wg%K={Yfi zWdN?h*`nBYiCqM*$cF|!tLX}DhN4%X`C^o>c9@_P-5fL!q;K(R2+7b!XpPc3EuyZ@7Ic(Ns z50BW|Y-%7=3m)m3XDp9&dzWuh$!<{_OUflpJotIyQms=*6O~Hl$mc5$#Gwc2+A^AS z?u45~TA_2II42sjW~rH)F9vagE|=WpbX2ajjb_dHHqk0-k7DUkClTjU$Fma7!>u0e z8AFLgti8bg5J9)Hx!RF{@^wq$#NI>sNgTJF8(tF~;hb~YZ=E`a7Y@HXZ+Z!;j6?@A z=eB~4LNv58zZj-M?jS1D57`)naTK#ie3&|UPNFVw+BAl#Jr-ZaGW(BD&$lQ(Bh$pp9J`-D`ILMu{?Wl=~*2^l`ayYfabw(Mo<+yR!=-8 z?q5Bj4t}QB5rj5XLo+z(In*5pb(whFNauwMt@3f7)S<4?xW6+D^->{nx8}if#!fsw zJmkUWdqmJE=s3P8ruwhmOH;6ti^v=e+eKJ^&Xyr>$$@u zPhYV)?ve~rXQX{%Mi#l860<=rf&p!kiBO~9dE`?^EE65qE_QBd(q zZ1(FjeR|=Gzs-FsB!m0MvdGi%@lA}%yEDJE2Yj}@>+pn}R@%fz(RP4~v zgrMtn0%+qr0VodU;G^tU{i1ZMY?l)9Z{2bU`yKO7wX1k(y62Pssb6xO=MZpIwf_S4 CEnYhS