From da60f86f6d39ff281cd5134a1beb3b866733f931 Mon Sep 17 00:00:00 2001
From: cxn-wr7-u1 <enes.herguel@stud.hs-hannover.de>
Date: Fri, 30 Apr 2021 02:17:51 +0200
Subject: [PATCH] ....

---
 examples/maze2.png                            | Bin 14273 -> 3650 bytes
 src/approach3/parallel/SharedRessources.java  |  12 +++--
 .../parallel/WallBasedPathfinder.java         |  24 ++++++++-
 src/approach3/parallel/operations/Flood.java  |   9 ++--
 src/approach3/parallel/operations/Trace.java  |  12 +++--
 src/approach3/window/MainWindowApproach3.java |  48 +++++++++++++-----
 src/structs/Int2.java                         |  28 ++++++++++
 7 files changed, 106 insertions(+), 27 deletions(-)
 create mode 100644 src/structs/Int2.java

diff --git a/examples/maze2.png b/examples/maze2.png
index 1aaec2636c11260c9a9edfce809568154ef6b57d..304c1b4719fbf9bace2456bba719211982f3b9e7 100644
GIT binary patch
delta 3350
zcmX?@e@JG61Scai0|SGs^MOkf6&3i|0(?ST85kJ;|Np=A=KQ-G?PMA2dG>p{IEGZ*
zx*EMV@3j~Il!=FW8K0ME^4ZyX$(_|?`eFD<i>-!Xe_Qa<t=6mtHuJyrpH^IH@wT+M
zGTcVmbN6N$zLgL6|B)`N-ut%T$V>5K`)}6Xx*NA~{{QD23uoNb-_d{L(P!~vmb;Z_
zUXPcUe)F&JjeD2(|7tb-lV8DfuPwaZXTQ-uwa*5#x5rEBAGVsg+sIXNvvTP-lTSUr
zPMgn&W4Pn7^SjBSyX#-tKZ$eS6nH26ZBo@vjm2e4_LZM`|954qkGJ{%^!s;Hm#oXG
z5_nqYE$)A7Z=cHIUF&Zjwf%Hr<L=WQMxW%X<eyd7&VK*Ddf(CNstNuzJ0{+g(9cYn
zeCKlg4bh~YycDxZzqjt<PvtrhlbWKl`8nsYY^j@1s^^#eWPAPjs<kiw#P_kbzpBgD
zPgt4UB>VoK{{9nOGk;mJSZlnG-Mi8`?kbn$1*vDQ*Y8RC)=vsl2tLkYeQ$5xMkYyz
zxBK_F+ifj(3%>VWQgiqEE$y$~-8)}ie_!_UiM+b`ugmIR<})7d>ALHg_`Jkh`FPWu
z*+0%~Hb1eXo7L#^QIp>xcj8Zb9DKF8-KSn^=M}fKa`u^@#N2w9nHlXb=bm|fpHLC!
zTaoIb36|eVr+JsEEIjG7EY2p=<m$v0HSU?aBKxF#OH~%Ww5!uT;ls%&KYfdisPFTh
z9Sh%l&%ODJY3At#z4cG(G6hy;c!{TeD``o0-t)<WQEH)QV~0G`TSX3EE|;PwcTUW`
zu*BgAcf&S@7ByC-xVW1VEo!`rp48<|KQi~i5=WQl;C~l-ma!<^yesKq8+Ijkp8LK$
zNncKvrnxyH2Lw8#_C34VpZ2X&=|;5ix9zdcllvEa%KMSYHEWx!?_$3Cpi&kqGglsl
z7u*ZN7A-jWnfs>Uo^!0eO|oo)w>V02R!JAG=e=pT$K7~V)R!IKd;hOB+b3~(!%L5e
z3?Uz<?(lA%Dxqc8TUExr+G^1SmhS>wVWln$Is2|_MsQxPzBD1SWvap6scmPJ*0j9*
zt9U}^px2Ch#*S&6VTZoNaTw({x7J_%w=cV~HF@%ari9X2@h8{1%F51Wv1ZX0T~cOe
z*2-U)$$0I!8mm&bKFdbUsD|@mZ)<b9rhUJ$qP^dj%S9}nBPn=`>Gxjty{{QUzW;W=
zeK$IlM?0xXXcAW-cXLRm@ApUZHWZs?2z~E*?z_93;h?j}jev|z@3?#$+$UeK+|N*N
z)ao?(gYo`792ZjVip~;P;Q3<C{aGI}gsi6b=<hxIo;9OKZDBE+i<a`G46lVf3R*tz
z)f593bMjf2m~E-f&uBXAC;L*-6C_ZxuJK}uB)cGQWT@lhN2OO+D8IPlzwqQHRVB|&
z%A0>zrx%t6YsY;LbX#_eZU4cInvz}Dd$a17Y&hua+*Ll^$EzvCdGfQ;BSD}2=kl`p
z&bqGIRDS6lm+!3Wf``x9m#&kQddx6UVzTGK1)d+RTtBS46}#B8(EgMy!!qCLLbgQ=
zLT^0ME?-)@J5UkCR&ic<a<zcVhgWZ`b?sK{;Y^&S!p>mZ>p1z;B!SeR9<>!ZoQ`U#
z7g*}2sw$pX!ZT~ZCKZ;MQyhgurnM+c7BcZ<ICa~m*N2yD^2ym&T492IIrpwiQf3Tf
zeJim;d)aegjbq|7UjAh1`pBAAW!IQg(>QaU|AK@DHy{4Kmj@YoXUNH1Zf1?T|Ngt4
z`xTE8^%~K~>yP{OyJUMUDC>PWx5?v6mdRe`)dFfl^@jUYo>!YiPMZ4Z#tWbGZi{jg
zG?t|+U$iq2xx9Je3lWK~mp461czBL}IkwKJBz94D)qT~?g3H`l-oG;0tNqmX`LQqO
zn$K<5Si0-R9?oYf8yK%W@pa(!jBEXn@oD)CRd%)fCQIdqn-b5>zTh+|Tv2A$pPziw
zPj+)nWWKO7J14BQenp0m=poO0W@c|^aTUJWxUy>RR{P?FHAVMS_REDksvq3k=u_<e
zW}ndnP5ZU$E@^&CQ3$S^Rd_-2XNrRIyX6;Zb3uIFi$B+WUY6p+sowiLb!AM_Ws`z?
zDjQy<<heSYI<6+l<bG6VcD2lG2ETuDN7NchJJ~mKJ~;B#F^9>bUbjwU_JLh2a!1tE
zDn6ax%C#}<>Qenc#k}=;W|{(l_nru?Fx&mKRISm-hhK61=l-R4_d4}0^FCl;+rqUo
zRw%JbaJ}^|R{M<d^%K0AQfJCJwcg3Q_I+8qe{<Lg>F=kfd$D?HK8Y)qSfh7wX513X
zf?Zp3TbKJ@S6(Q8Xpv{pzS8;?mJueQ-|J(&TjLlGoO1a2YoYem3#YjwCTjjy$=@`K
zdCn<zhfiwDEe~*}9R0ggyCSN1LWyU{_TpaO<Edv4iqDJlsHsR!inuHKy}Iuxd%=>_
zWzUbYcinD#S^1GMVVZ-_`EGuOVu7TpxEhA1_aLJGmduR1eMQt|@vZkF_1m;AD=!L5
zy4=OX86-Vx?|D-V&GmmIJAGf>OYBOEyBq(Sfo17S#R;eWf2?lT{PFV?%UUfT%a1|^
zd%a`!x++YKKhtNj^uqaum$IUtg?#;w3LpMbGA-qmufO4C>n{_Q{CM!hrF-S;iJMMd
zlxGqP>wRhY{oEImHM^!|{nqLE#e8aZ{gr=i@%OS0JoUX7J7Zqc)rF^zZ99}-Vi<7G
z<g0?ISd+R>|EtwuisAyA%gi@9*;#CjHL*SW#cpHdim4xOE)bbwT9=^_^hhqds?d3&
zDtmjYmeTxLUeUjrPZv20_7q00YPi(7zGS1gmhs+~aUA}qO429td#VInd8L~vn$LXp
z>yr8-dyRskT5Z&M`&nM<EHVmiV=8rzF}>`3WclL9K33f}(fxehAPM2@XHHE1dpDm*
zm%8YvKi4%V?bPi(0ydc%x5{{{S4(wOeJwk9gGVJLW~GPCH#5$RRvAD2jWb0Sa$a~j
z>FO7mSr4|z&Gr<W^<aw1Y|n#NW{2!bF}3YiTVLNa(}!!>y(O2Ho-D9;3qJF@$7$cP
zxDMz1iVdyH&3C1k?v>~AU%2eM^Fz%`U+Oe$TxZ?mZ(Z(j`S-#PBAHe8BJ<WPbC=ro
zu&%k&cd@38<U8{pH=d;JpPcd0z^w2@t;FnAzw?uYFSoXD>^ynm@QskW_0qFDJW5Rp
zYp3=YYqQJx)-x#?`LM1s-fQ>r&!Zz1i&?yk_Z}^fGPaeUonWMyRMj1#kXF_0qMTM`
zXLi%4YsNh#&!lDHTAQPVXP;|!3x4_Zb8Xd~4eA*|S8t1TzB{|uTtqiCzjxPu1@{SD
z2VVxMfG8e?Ny;9rJ1i!il$*cAsbH7LNx>yfHCByhWdF+6`<74E3q2f`uX$rdNv8Ps
z3EuigHeATu_xe#~$X-(|mbw?M9bR`%?-g)Z;H2~2iJ_5e;~j2B7Of*i`YZw~1OoMs
z%xu2m)tK>W=hXH0HgN@>@>%2LksdfZL~Vl4Dz$*XbioAaE}P57@76d~EMxz>D>Als
zhMdDo<I82|zw}tI7O3xgd3Ei@&AEP-pFGabUb6XxO$)E<N;TK`lsAhO<?=_Xzq&m6
z#PJ&o<y1rSjRLPob;qthdRodmc73T@w#L`znh(UUMZBt78+Yx1)Aj6qPk5Jh-%Q)1
zX|Ut9=?jT+QH`r#y*6vViD+zk<-70p-6H!NazzbC*`L*Iuzlh%Vg04)2KC*tdh>oC
z{5qi-BwS$o<ikvxrC*k{|M7_wdMUK6>h;mR3OS*zF%u#)6?#{!Up_C^!nHC<XN5p`
zaDLFciCl>*86Ic{OffgSsPS7mB0w=BOX0gm>jssT3BnNpil3H=EmOaG`@O4Zl0uVt
zTkKQu|Fyy&9VaP^Tu%1uV(>lkr9L9dp+POF>dbP%1)VeGd^)c!Mo>AO*A{lpxHo;0
z)Q<eV*(dWqxgK-kcDca*+iAY($N4XFg|bi0Zd#<9aE>j)r16q!gZ1}>i%-NI=4Lmz
zPL7W&&0-Ssoue1n9r#bu<mcLzel-DmGcUbezslc#Uw+ijSGgC?uWGKJvhv=&*?s3$
zxvz1G@bj8EC0y}>DZAhFB+)~kUcPWvpKShgzVGxTQKs192PK+eiayH@&J^i*x$>OS
ze7(0am#ah4jC}Iz7cZLRQ5kbybs4*O_(k5S=CNz91jH@QYGioP-BW$#;?gZ4FZOhX
zn`SjOoSS{6UBcl86XQQ6<u|3lTJ^>y_paC<S&+|M-1T|k!VkT?<~D2Q{3s~=s@7rf
zt|~c~HS6-#+S|t)9iCRdf2aN<t?0k%?hv&celCI9lX|86w;wXO#Bcha`7XR!R^ivA
z*etVU*6bZ2`-Enn`}g{WwP@26uEIrClQk-=FDG3I=`hngYLcmO>vdj<^y~u)OrjZi
z50iu?T<*<H5<Z~ts7fy<he^UEW<hJOFGKT*-N9hq`OtW7zvfj}%S@(z+q2R1jqXZ;
yX5%Sb4>v7Qef(azbx!YXG~&bjzr2V4GuqC6z1($n-c<$$1_n=8KbLh*2~7Ztl0t3(

literal 14273
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

diff --git a/src/approach3/parallel/SharedRessources.java b/src/approach3/parallel/SharedRessources.java
index 4860103..d2b4ea6 100644
--- a/src/approach3/parallel/SharedRessources.java
+++ b/src/approach3/parallel/SharedRessources.java
@@ -132,15 +132,21 @@ public class SharedRessources {
     }
 
     public int getStep(int x, int y) {
-        return data[x + y * width].getZ();
+        synchronized (this) {
+            return data[x + y * width].getZ();
+        }
     }
 
     public void setData(int x, int y, int dirX, int dirY, int step) {
-        data[x + y * width] = new Int3(dirX, dirY, step);
+        synchronized (this) {
+            data[x + y * width] = new Int3(dirX, dirY, step);
+        }
     }
 
     public Int3 getData(int x, int y) {
-        return data[x + y * width];
+        synchronized (this) {
+            return data[x + y * width];
+        }
     }
 
     public boolean isWall(int x, int y) {
diff --git a/src/approach3/parallel/WallBasedPathfinder.java b/src/approach3/parallel/WallBasedPathfinder.java
index 280f597..8508721 100644
--- a/src/approach3/parallel/WallBasedPathfinder.java
+++ b/src/approach3/parallel/WallBasedPathfinder.java
@@ -30,10 +30,11 @@ public class WallBasedPathfinder {
     }
 
 
+    ArrayList<Point> path
+            = new ArrayList<>();
+
     public ArrayList<Point> calculatePath(int startX, int startY, int destX, int destY) {
 
-        ArrayList<Point> path
-                = new ArrayList<>();
 
         int x = startX;
         int y = startY;
@@ -52,10 +53,23 @@ public class WallBasedPathfinder {
             if (dx == 0 && dy == 0)
                 break;
 
+
             // System.out.println(Lexicon.getInstance().getText(new Point(dx, dy)));
             x += dx;
             y += dy;
+
+            /*
+            try {
+                Thread.sleep(1);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
+             */
         }
+
+        System.out.println("Done tracing back.");
+
         return path;
     }
 
@@ -117,5 +131,11 @@ public class WallBasedPathfinder {
                 SharedRessources.getInstance().getStart().x * MainWindowApproach3.SIZE,
                 SharedRessources.getInstance().getStart().y * MainWindowApproach3.SIZE,
                 MainWindowApproach3.SIZE, MainWindowApproach3.SIZE);
+
+        g.setColor(Color.red);
+        for (int i = 0; i < path.size(); i++) {
+            var pt = path.get(i);
+            g.fillRect(pt.x * MainWindowApproach3.SIZE, pt.y * MainWindowApproach3.SIZE, MainWindowApproach3.SIZE, MainWindowApproach3.SIZE);
+        }
     }
 }
diff --git a/src/approach3/parallel/operations/Flood.java b/src/approach3/parallel/operations/Flood.java
index 6accf9c..3c65bfa 100644
--- a/src/approach3/parallel/operations/Flood.java
+++ b/src/approach3/parallel/operations/Flood.java
@@ -17,7 +17,7 @@ public class Flood implements Runnable {
 
     private int steps;
 
-    private ArrayDeque<Point> openPoints
+    private Queue<Point> openPoints
             = new ArrayDeque<>();
 
     public Flood(int x, int y, int steps) {
@@ -34,10 +34,7 @@ public class Flood implements Runnable {
 
         openPoints.offer(new Point(px, py));
 
-        while (!openPoints.isEmpty()) {
-
-            if (SharedRessources.getInstance().isFound())
-                break;
+        while (!openPoints.isEmpty() && !SharedRessources.getInstance().isFound()) {
 
             Point cur
                     = openPoints.poll();
@@ -138,6 +135,8 @@ public class Flood implements Runnable {
 
         }
 
+        // System.out.println("[*] Done flooding.");
+
 
     }
 }
diff --git a/src/approach3/parallel/operations/Trace.java b/src/approach3/parallel/operations/Trace.java
index 6a42ffa..855cd85 100644
--- a/src/approach3/parallel/operations/Trace.java
+++ b/src/approach3/parallel/operations/Trace.java
@@ -75,11 +75,13 @@ public class Trace implements Runnable {
 
             if (SharedRessources.getInstance().isWall(x0, y0)) {
 
+                // System.out.println("Collision at step #" + step);
+
                 if (step < SharedRessources.getInstance().getStep(oldX - 1, oldY)) {
                     SharedRessources
                             .getInstance()
                             .getExecutor()
-                            .execute(new Flood(oldX - 1, oldY, step));
+                            .submit(new Flood(oldX - 1, oldY, step));
 
                     SharedRessources.getInstance()
                             .setData(oldX - 1, oldY, 1, 0, step);
@@ -90,7 +92,7 @@ public class Trace implements Runnable {
                     SharedRessources
                             .getInstance()
                             .getExecutor()
-                            .execute(new Flood(oldX + 1, oldY, step));
+                            .submit(new Flood(oldX + 1, oldY, step));
 
                     SharedRessources.getInstance()
                             .setData(oldX + 1, oldY, -1, 0, step);
@@ -100,7 +102,7 @@ public class Trace implements Runnable {
                     SharedRessources
                             .getInstance()
                             .getExecutor()
-                            .execute(new Flood(oldX, oldY - 1, step));
+                            .submit(new Flood(oldX, oldY - 1, step));
 
                     SharedRessources.getInstance()
                             .setData(oldX, oldY - 1, 0, 1, step);
@@ -111,7 +113,7 @@ public class Trace implements Runnable {
                     SharedRessources
                             .getInstance()
                             .getExecutor()
-                            .execute(new Flood(oldX, oldY + 1, step));
+                            .submit(new Flood(oldX, oldY + 1, step));
 
                     SharedRessources.getInstance()
                             .setData(oldX, oldY + 1, 0, -1, step);
@@ -126,5 +128,7 @@ public class Trace implements Runnable {
 
         }
 
+        // System.out.println("[*] Done line");
+
     }
 }
diff --git a/src/approach3/window/MainWindowApproach3.java b/src/approach3/window/MainWindowApproach3.java
index e5fcc74..fdad62e 100644
--- a/src/approach3/window/MainWindowApproach3.java
+++ b/src/approach3/window/MainWindowApproach3.java
@@ -19,7 +19,7 @@ public class MainWindowApproach3 extends Game {
     }
 
 
-    public static final int SIZE = 5;
+    public static final int SIZE = 1;
 
     private WallBasedPathfinder pathfinder;
     private ArrayList<Point> foundPath;
@@ -30,12 +30,12 @@ public class MainWindowApproach3 extends Game {
     @Override
     public void loadGame() {
 
-        SharedRessources.getInstance().setMaxCores(4);
+        SharedRessources.getInstance().setMaxCores(2);
         SharedRessources.getInstance()
-                .setCurrentProfile(SharedRessources.Profile.MEDIUM);
+                .setCurrentProfile(SharedRessources.Profile.BEST_NODES);
 
         try {
-            MapLoader.getDefault().load(ImageIO.read(new File("examples/debug.png")));
+            MapLoader.getDefault().load(ImageIO.read(new File("examples/maze3.png")));
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -55,19 +55,43 @@ public class MainWindowApproach3 extends Game {
             SharedRessources.getInstance().setEnd(this.getMouseX() / SIZE, this.getMouseY() / SIZE);
 
         if (isKeyDown(KeyEvent.VK_ENTER) && !pressed) {
+
+
+            SharedRessources
+                    .getInstance()
+                    .setStart(12, 38);
+
+            SharedRessources
+                    .getInstance()
+                    .setEnd(793, 741);
+
+            System.out.println("BEGIN: " + SharedRessources.getInstance().getStart());
+            System.out.println("END: " + SharedRessources.getInstance().getEnd());
+
+
             pressed = true;
             pathfinder.find();
 
 
-            while (!SharedRessources.getInstance().isFound()) ;
+            SharedRessources
+                    .getInstance().getExecutor()
+                    .execute(new Runnable() {
+                        @Override
+                        public void run() {
+                            while (!SharedRessources.getInstance().isFound()) ;
+
+                            int beginX = SharedRessources.getInstance().getStart().x;
+                            int beginY = SharedRessources.getInstance().getStart().y;
+
+                            int endX = SharedRessources.getInstance().getEnd().x;
+                            int endY = SharedRessources.getInstance().getEnd().y;
 
-            int beginX = SharedRessources.getInstance().getStart().x;
-            int beginY = SharedRessources.getInstance().getStart().y;
 
-            int endX = SharedRessources.getInstance().getEnd().x;
-            int endY = SharedRessources.getInstance().getEnd().y;
+                            foundPath = pathfinder.calculatePath(beginX, beginY, endX, endY);
+                        }
+                    });
+
 
-            foundPath = pathfinder.calculatePath(beginX, beginY, endX, endY);
         }
 
         if (isKeyUp(KeyEvent.VK_ENTER))
@@ -86,9 +110,7 @@ public class MainWindowApproach3 extends Game {
         if (foundPath == null)
             return;
 
-        g.setColor(Color.red);
-        for (var pt : foundPath)
-            g.fillRect(pt.x * SIZE, pt.y * SIZE, SIZE, SIZE);
+
 
     }
 }
diff --git a/src/structs/Int2.java b/src/structs/Int2.java
new file mode 100644
index 0000000..040b592
--- /dev/null
+++ b/src/structs/Int2.java
@@ -0,0 +1,28 @@
+package structs;
+
+public class Int2 {
+    private int x;
+    private int y;
+
+    public Int2(int x, int y) {
+        this.x = x;
+        this.y = y;
+    }
+
+    public void setX(int x) {
+        this.x = x;
+    }
+
+    public void setY(int y) {
+        this.y = y;
+    }
+
+    public int getX() {
+        return x;
+    }
+
+    public int getY() {
+        return y;
+    }
+
+}
-- 
GitLab