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