From 933c00710b74f8610ae4a64141b00a45e2a2320b Mon Sep 17 00:00:00 2001 From: 20050114 <20050114@studenti.uniupo.it> Date: Wed, 20 Mar 2024 11:05:44 +0100 Subject: [PATCH] Lab2 Algo --- .../Laboratorio/Lab2/TestGraph/TestGraph.java | 69 ++++++++++++++++++ Algoritmi_2/Laboratorio/Lab2/algo2_2.iml | 55 ++++++++++++++ .../Lab2/out/production/algo2_2/BFS.class | Bin 0 -> 1940 bytes .../Lab2/out/production/algo2_2/Main.class | Bin 0 -> 823 bytes .../Lab2/out/test/algo2_2/TestGraph.class | Bin 0 -> 3056 bytes Algoritmi_2/Laboratorio/Lab2/src/BFS.java | 40 ++++++++++ Algoritmi_2/Laboratorio/Lab2/src/Main.java | 10 +++ 7 files changed, 174 insertions(+) create mode 100644 Algoritmi_2/Laboratorio/Lab2/TestGraph/TestGraph.java create mode 100644 Algoritmi_2/Laboratorio/Lab2/algo2_2.iml create mode 100644 Algoritmi_2/Laboratorio/Lab2/out/production/algo2_2/BFS.class create mode 100644 Algoritmi_2/Laboratorio/Lab2/out/production/algo2_2/Main.class create mode 100644 Algoritmi_2/Laboratorio/Lab2/out/test/algo2_2/TestGraph.class create mode 100644 Algoritmi_2/Laboratorio/Lab2/src/BFS.java create mode 100644 Algoritmi_2/Laboratorio/Lab2/src/Main.java diff --git a/Algoritmi_2/Laboratorio/Lab2/TestGraph/TestGraph.java b/Algoritmi_2/Laboratorio/Lab2/TestGraph/TestGraph.java new file mode 100644 index 0000000..6aa6324 --- /dev/null +++ b/Algoritmi_2/Laboratorio/Lab2/TestGraph/TestGraph.java @@ -0,0 +1,69 @@ +import it.uniupo.graphLib.DirectedGraph; +import it.uniupo.graphLib.GraphInterface; +import it.uniupo.graphLib.UndirectedGraph; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; + +import static org.junit.jupiter.api.Assertions.*; + +public class TestGraph { + @Test + void testCreate() { + GraphInterface grafo = new DirectedGraph(3); + BFS bfsTest = new BFS(grafo); + assertNotNull(bfsTest); + } + + @Test + void testInvalidSorgente() { + GraphInterface grafo = new DirectedGraph("1"); + BFS bfsTest = new BFS(grafo); + assertThrows(IllegalArgumentException.class, () -> bfsTest.getNodesInOrderOfVisit(3)); + } + + @Test + @Timeout(value = 500) + void testScoperti() { + GraphInterface grafo = new DirectedGraph("3;0 1;1 2;2 0"); + BFS bfsTest = new BFS(grafo); + assertTrue(bfsTest.getNodesInOrderOfVisit(0) != null); + } + + @Test + void testNumeroNodiVisitati() { + //Un solo nodo + GraphInterface grafo = new UndirectedGraph("1"); + BFS bfsTest = new BFS(grafo); + assertEquals(1, bfsTest.getNodesInOrderOfVisit(0).size()); + + //Due nodi ed un arco + grafo = new UndirectedGraph("2; 0 1"); + bfsTest = new BFS(grafo); + assertEquals(2, bfsTest.getNodesInOrderOfVisit(0).size()); + + //Quattro nodi e quattro archi + grafo = new UndirectedGraph("4;0 2;0 1;2 3;1 3"); + bfsTest = new BFS(grafo); + assertEquals(4, bfsTest.getNodesInOrderOfVisit(2).size()); + + } + + @Test + void testBFSOrder() { + GraphInterface grafo = new UndirectedGraph("4;0 2;0 1;2 3;1 3"); + BFS bfsTest = new BFS(grafo); + assertTrue(bfsTest.getNodesInOrderOfVisit(2).get(2) == 0 || bfsTest.getNodesInOrderOfVisit(2).get(2) == 3); + } + + @Test + public void testInitNumeroNodiVisitati() { + GraphInterface grafo = new UndirectedGraph("4;0 2;0 1;2 3;1 3"); + BFS bfsTest = new BFS(grafo); //<<- creato una volta sola + int numeroNodi = bfsTest.getNodesInOrderOfVisit(0).size();//<<-prima chiamata del metodo + assertEquals(4, numeroNodi); + numeroNodi = bfsTest.getNodesInOrderOfVisit(2).size(); //<<-seconda chiamata, stesso oggetto, parametro diverso + assertEquals(4, numeroNodi); + numeroNodi = bfsTest.getNodesInOrderOfVisit(3).size(); //<<-terza chiamata, stesso oggetto, parametro diverso + assertEquals(4, numeroNodi); + } +} diff --git a/Algoritmi_2/Laboratorio/Lab2/algo2_2.iml b/Algoritmi_2/Laboratorio/Lab2/algo2_2.iml new file mode 100644 index 0000000..9ce1010 --- /dev/null +++ b/Algoritmi_2/Laboratorio/Lab2/algo2_2.iml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/TestGraph" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/Downloads/graphLib.jar!/" /> + </CLASSES> + <JAVADOC> + <root url="jar://$USER_HOME$/Downloads/graphLib.jar!/doc" /> + </JAVADOC> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library" scope="TEST"> + <library name="JUnit5.8.1"> + <CLASSES> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.8.1/junit-jupiter-5.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.8.1/junit-jupiter-api-5.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.8.1/junit-platform-commons-1.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.8.1/junit-jupiter-params-5.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.8.1/junit-jupiter-engine-5.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.8.1/junit-platform-engine-1.8.1.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library" scope="TEST"> + <library name="JUnit5.8.1"> + <CLASSES> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.8.1/junit-jupiter-5.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.8.1/junit-jupiter-api-5.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.8.1/junit-platform-commons-1.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.8.1/junit-jupiter-params-5.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.8.1/junit-jupiter-engine-5.8.1.jar!/" /> + <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.8.1/junit-platform-engine-1.8.1.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + </component> +</module> \ No newline at end of file diff --git a/Algoritmi_2/Laboratorio/Lab2/out/production/algo2_2/BFS.class b/Algoritmi_2/Laboratorio/Lab2/out/production/algo2_2/BFS.class new file mode 100644 index 0000000000000000000000000000000000000000..c11dfe84ffe56572c3978073fb4e50863fe675a3 GIT binary patch literal 1940 zcma)7ZBrXn6n-uV*$|eOLU{?aGzH2#O|^;^unH7vGz3d96ntHh%d!wQxY^M1!GGa& zv|n__8T+-)C`cK_uj(K26ZN^9K+=wk&cN=u_dNGG=RD`^&7UXFegiOttq`i<)8N-p zjetPorm<^8vxaR(7uGgq+7$>)TDIlh7Vr%WrfLvGjfRkpTIk%Go=Xa7+k1B%V`oF4 zCvLgXf^8Lca#2%l#jUld=Zo2{bk>cuoTx=T8Z<QOxPT^stN(dIAZSW=!O2L+OCqM> zqCj^!(^xhuO(Q$yn1yX=yR#3|a>uoDb`Y%skvkSQ^IXbEMrN}{B$;ze!em4`j^P?1 zG^1UW9~NjCh?i-Tu4CEe#9&H8r$DpkD7aQOI>mE)aVzhJ&;efvUAUqlqT?#M1um2c zRL!PJTH7_U1-Y;;&^izstO!v;OemsW9oNvu3XM$WrA&&gm>68uFd%TToJriWw`8W6 zN<VzH7)Gy#5rKv>=3YS-r1D(X5ycH=W94VJcicTs%vI%iRmV-d##TFWJGUztVxTh1 zQg~J9n2tA8*MgSqrc_a?o40g~V?sb@n-bD8H`a1aUZCxzS~&p5T2@YIcuSzZoS;g- z7L#~e$2*u(+zRRDC|v7l9-i*8(mqFM26r^f>X=gnHI=zeA*^!4$S34OGSA>$9Whm( z-{ywW`h6X7rFAf!vt7fonQh;||Crsu6iH@s8A{YZ?Pa2{y(XO{RTk5T=h8+tWjK~v zmp1+GhDG-3IKLE1Buo~iWFkjCW_v@uu%5E=7QeLiGr?XQGoB0DC0#j)|1v)$F7Q7l zP;&}o(8eOtBU2(Po_uNei6)|@0&zCggw=TiyOdj$Zo#pM{epvCf%RsJxYid--rG4X z`&tE9g`O;~y^G~^=x>u?r~-GEz<J=l3b2>KdBD1)Yoxd4jh#{xYLb>|8!Uxg8a+qk z^SDCET)|1pIZL%T$Sz)2)5dQ-$eR-oeDW%!RYkiR^L!?_n&VpeLqi7;L&HBq`_aQJ z@L3NZpE~@sYS4fWxN0q;aSw}J@f?ywP<brjL;A=m{^GeB`i_Twf_8{HfzIzycZBAZ zrj`S=9Uq}%<p7uFOYg);=P$UtkDlexQ{xEzL=2Am!+y1Oh@mPhhy8~b6?lvdWxXQs zJG%Dq`dGCJ(^7qiH><ccIUWcH4#D4naV^Z~(*ob%rn2sOC&q&#;ov^rdyG!c=pk=7 zSd1{LJUz=#p8xUW`B$S)S%M!*hy<@*pb2$+x1j}BC__K38)(NZgfY!eHGxjt$0eA! zj0e1d9uf5|BKUzVc#3Wupcl`0bN-4xPsl|!<`I1<EYmV6<9)2KF%NhTtl}dClz?Y4 zALC<s1v$UNC-{^?_v34PM$5<OU*dBZ%yo@thWIXWq{&glXU_1MGrS~jo%k*U+D<U0 ep~L$dKB2N2CN<2A{f(+BW~N4FgRw2o+WZGhU(%ES literal 0 HcmV?d00001 diff --git a/Algoritmi_2/Laboratorio/Lab2/out/production/algo2_2/Main.class b/Algoritmi_2/Laboratorio/Lab2/out/production/algo2_2/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..b5b51aed06a353d0c36a5840ef299ac7d1a85e64 GIT binary patch literal 823 zcmZ{iTWb?R6vzLQ+a~MUOJZWJm#$Uormfv3^(`V)p%U0Og=nDoG)X4ulw>zdW()mT z`p|#{KY$-fJhKr>CGNt^oa^tLGxO{BkDmYz@zzEPX$u(#S>za2F8C$)M?4(*t?q^B zX@=Z88A|=0A?;N=7V-?6Qu}cz<4NQX6`!03vg>~d`%;m==zlV*JZy&5gND2B)*5cj zt(#N5VZ(xBQ1=<iUT_O*YbC>B!vL0v^x>#&V+pIqwaBpL1q+Y~s2OUZ2D~RIwtxpH zTc|jAh_yStw6CUGj45#xQ%B`FSVsOSQ8lpzA5(2hSa<LkPZ%mgp--Z|m^Q<f>I>Bx zbmUZ0=$hB8&ZA>3NB*Hw{3?)BP0`P=VZn9q9GeWKq_w*Q25Vw?qwt^R=aWvFf60(J z=8`-zABoSf9LP|d#N)0|pLusgnqm<3_^88`H1c0%MxV<m-Bn<M8x%cGl2p8}i-t^g zu7>1aT3}|#k7Y!|9YhT4{~bI*vJ(|ua@qsBFOuzc6sw*%lBUdpsbtTLfhO{TUYYq) zAaCSoeMOQ_JEJ|jJp=oen73#(W*~#tv^sMKc&L(8z&3VBV}d2p^aC3=u+EBw8SVu) zSUTI8VdeNcO1tT6Ji5ly+q6YWX_A{aSVEretB@evc^d5E4cTp!v6oa<BKSUPNzHY# Hq;T*D!T_~a literal 0 HcmV?d00001 diff --git a/Algoritmi_2/Laboratorio/Lab2/out/test/algo2_2/TestGraph.class b/Algoritmi_2/Laboratorio/Lab2/out/test/algo2_2/TestGraph.class new file mode 100644 index 0000000000000000000000000000000000000000..acd573a97439e977f7f82b1ade68f2f8de7a9471 GIT binary patch literal 3056 zcmb7GT~iZh7(Fi}S%|A3C@P{vMH>(e1i#uS8WA-buo}c_tDPlT!oso}H@hnKYx*;K z)n2vNy%9!dI$rgn)1T8@J3a4aSvE{`EE#sQ@5l3;bKdhjo4@{j{Re<Nen_GX?FwQl z;z$T|FKf@VjHy}G%$<d0z3d7kE*h5MP71WAhvyY^2&4=*<5`ARvolpkt1T6ch0Ha> z;cC5dLk=XNASom65QwD<a@$Vszk0otgo-XX(=Bi!U2GA^4^XgN-C5MidTw|=i5~PS z*rQ@E`k35ys+nb`cX_QDT$j;mMkZgc>yB&KR$XAH=0D8Z?yP5;0(;ZN?X(!T1N#NU zxWw8o5gpvNu;e<1RpmkjhXjspMJSl2Ue(OJQ}tGL%bk8v)@w3z4;39$k-`xHMSr1} zJy#dVri<jA8!ooSz35qGxj8fKZ_pM@Jtr9-Q!#|&0&0WH+>&EIC$&<P%9P2;-2VtX z9MQp#=%?$zC)8{rH<lXDji<7?Y-&s%)3AyWoD}G*>h7#v(dz~4j#JT{JB#y1-Jmh{ z^JE(VJ=ZWZdB@S#ibmb_@t;z08X19PfZy?`MJ)YD$~jIsTb%rTtI}+uG4v;K24@wV zQ*j;_1bY2bXimqlb>k(Y)1L(?-DfItxEM+|{nXP;N*7NT=)?}t$%$+(MYbKdBCz`m ziD!NC+0+CDn2<TIs+htx#w2;^i%q7H%E&3W&g~Ij(6m+ENn#o|RTL!N4#RTiHPh1- z+!pAZ)9bG9Z(^RJqyk+<!_sHH)dk&|lZPSDQ?$#PIj=c}d=3U<?vg<YJBne19Hn&` zZpzU$X|p&hanTky_7OEjdoC>2Whn0R-6?S3o@cqnsxHr#dGnTKyIN3B1Mjhzj6fW{ z5=X&$rkO^iM3=KB2uPKqrLtX<Wl4XPT&=t^qt$#y3ceCJ(!vAH)h{skzSM+jdop{R zc|ASO+T)-2hklibDXH$*w5{Qrl}rLetVQ3&0{soxM$5HHD-6IUQ4km~wbg}+Hq?Ua z&=?OosPcIpOV|+V3YIrL>l-JmIj$<%o>SJZ8}iI|%@MLs{j{_b+wfJ}cIz&C>5T3! z*_C=X5?u+@lDLJZDi%@YQ#}b6o`Pp8p5sMRi!!Wd_KKb<`j{C)V=r}WXN?wGjXwPy zZ70E|M#h_(RWbGYP|>zmyjm{OID)<y8EM)$w^q}m%Rhdyk@CZPqa7@WJf)dtiSGe= zK`mI8?)Ys{r}*Cp9N#L>CLqo96nrOe_`^%tH5yvr2oIsnw_6A3KO}f9@;Sr1;5|OF z4)Hs`v|)x<ISq7TmRGg00C(^?pMblZZSyy4Xy*sm_Xf(t#5y{QZ=gOrxsF{kqZ`=0 z6|M&{E>jtBCwtv4^r6cSooZ|kLU(fJ9!gBtLxgj<&ouMgC&4`69rz+ly&R-Y$<#gj z)^T7fchA7+Ya9kPaP+};482HV4|@4p9wZ7$uYn;IU`TSbfuWaJTVZ$@V)!w@Fyv!6 z(S%{N{T0%GLW%u`So;P>C60Dq+J+VfiDQ5`4&fM~Zs8aTarB2cb_X~fF~&}`y~Ch_ zFBPa)gfCAQWs>qdrc6(6;cI@?LX2+%j8EQR%-1QqrBloY`3e&o_|%`iw2sJheEam} zrfFp~PKu4)TPlx`7sx5eUjn^2PL<Ob<|oVd@+3~-Cf~4k>AJ@lkFb6cvYrcB-)^b? zLdfjrfLY#$-i*zMMtJ$Rn0|#DKcR2iNaC0GAI({UKS%KAaRnD5AoC%}^C8I7k)zp# z_IJ3@IGXn0Y&NYcP!56rO5m~_CR+iQwxOnz${`-grozEfB09Gv`3aU4aFM7l5%nZ( zb(!UUg@WfP^i^`0;><Ol$w(t}$mC4O<Yd5P07p@QPK=S#>rTq{9aQ}|@3K26BN9-g x!WvCuub-&VG!#E5u*BstZZa5lh2Ps?VwHEf%Hfy=oBwMZNpj>RzQy-A@E?i(xp4ph literal 0 HcmV?d00001 diff --git a/Algoritmi_2/Laboratorio/Lab2/src/BFS.java b/Algoritmi_2/Laboratorio/Lab2/src/BFS.java new file mode 100644 index 0000000..a040151 --- /dev/null +++ b/Algoritmi_2/Laboratorio/Lab2/src/BFS.java @@ -0,0 +1,40 @@ +import it.uniupo.graphLib.GraphInterface; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +public class BFS { + + private GraphInterface myGraph; + + public BFS(GraphInterface g) { + //System.out.println(g); + this.myGraph = g; + } + + public ArrayList<Integer> getNodesInOrderOfVisit(int sorgente) { + if (this.myGraph.getOrder() <= sorgente) { + throw new IllegalArgumentException("Dimensione della Sorgente errata"); + } + ArrayList<Integer> s = new ArrayList<>(); + ArrayList<Integer> valueToReturn = new ArrayList<>(); + s.add(sorgente); + valueToReturn.add(sorgente); + Queue<Integer> q = new LinkedList<>(); + q.add(sorgente); + while (!q.isEmpty()) { + int u = q.remove(); + List<Integer> neighbors = (List<Integer>) this.myGraph.getNeighbors(u); + for (Integer neighbor : neighbors) { + if (!s.contains(neighbor)) { + s.add(neighbor); + q.add(neighbor); + valueToReturn.add(neighbor); + } + } + } + return valueToReturn; + } +} diff --git a/Algoritmi_2/Laboratorio/Lab2/src/Main.java b/Algoritmi_2/Laboratorio/Lab2/src/Main.java new file mode 100644 index 0000000..b454cf6 --- /dev/null +++ b/Algoritmi_2/Laboratorio/Lab2/src/Main.java @@ -0,0 +1,10 @@ +import it.uniupo.graphLib.Graph; +import it.uniupo.graphLib.UndirectedGraph; + +public class Main { + public static void main(String[] args) { + Graph mioGrafo = new UndirectedGraph("3; 0 1; 1 2; 0 2;"); //Num Nodi + Archi + BFS prova = new BFS(mioGrafo); + System.out.println(prova.getNodesInOrderOfVisit(0)); + } +} \ No newline at end of file -- GitLab