From 6a9cadf1f4414137e0affba91737314f27df33b8 Mon Sep 17 00:00:00 2001 From: martin Date: Fri, 27 Apr 2007 22:06:59 +0200 Subject: [PATCH] =?utf8?q?-=20schiebe4=20hinzugef=C3=BCgt=20-=20load=20ver?= =?utf8?q?vollst=C3=A4ndigt=20-=20transitionen=20entbuggt=20=3D=3D=3D=3D?= =?utf8?q?=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D?= =?utf8?q?=3D=3D=3D=3D=20Wie=20f=C3=BChlen=20uns=20verarscht!!!?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- MinSchritte.java | 5 +--- Transitions.java | 12 ++++----- load.java | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++------ schiebe.java | 41 +++++++++++++++++++++++----- start | 4 +++ start_final | 4 +++ ziel | 4 +++ ziel_final | 4 +++ 8 files changed, 131 insertions(+), 24 deletions(-) create mode 100644 start create mode 100644 start_final create mode 100644 ziel create mode 100644 ziel_final diff --git a/MinSchritte.java b/MinSchritte.java index 0b0de07..380ca5c 100644 --- a/MinSchritte.java +++ b/MinSchritte.java @@ -20,7 +20,7 @@ class MinSchritte { Index 2 -> Zweier horizontal Index 3 -> Zweier vertikal Index 4 -> Vierer */ - ArrayList< ArrayList > zielCoords = new ArrayList< ArrayList >(); + ArrayList< ArrayList > zielCoords = new ArrayList< ArrayList >(); ArrayList< ArrayList > findCoords(Knoten k) { @@ -99,9 +99,6 @@ class MinSchritte { minSum = tmpSum; } } - if(i==4) { - minSum *= 1; - } luftlinie += minSum; } diff --git a/Transitions.java b/Transitions.java index 62a50d2..ab25548 100644 --- a/Transitions.java +++ b/Transitions.java @@ -182,8 +182,8 @@ position: && k.get_field(1,2) == Knoten.leer ) { - int[][] a = { { Knoten.vierer_lo, Knoten.vierer_ro }, - { Knoten.vierer_lu, Knoten.vierer_ru } }; + int[][] a = { { Knoten.vierer_lu, Knoten.vierer_lo }, + { Knoten.vierer_ru, Knoten.vierer_ro } }; int[] offset = { 0,1 }; Knoten neuerKnoten = new Knoten(k, offset, a); neuerKnoten.add_dublikatfrei(knotenListe); @@ -226,12 +226,12 @@ position: Knoten.zweier_rechts }; transitions[6] = new Transition(e, f, 3,1); transitions[7] = new Transition(f, e, 3,1); - int[] g = { Knoten.vierer_lo, Knoten.vierer_ro, - Knoten.vierer_lu, Knoten.vierer_ru, + int[] g = { Knoten.vierer_lu, Knoten.vierer_ru, + Knoten.vierer_lo, Knoten.vierer_ro, Knoten.leer, Knoten.leer }; int[] h = { Knoten.leer, Knoten.leer, - Knoten.vierer_lo, Knoten.vierer_ro, - Knoten.vierer_lu, Knoten.vierer_ru }; + Knoten.vierer_lu, Knoten.vierer_ru, + Knoten.vierer_lo, Knoten.vierer_ro }; transitions[8] = new Transition(g, h, 2,3); transitions[9] = new Transition(h, g, 2,3); int[] i = { Knoten.vierer_lu, Knoten.vierer_ru, Knoten.leer, diff --git a/load.java b/load.java index 67b33b8..625c803 100644 --- a/load.java +++ b/load.java @@ -1,4 +1,5 @@ import java.io.*; + class load { public static void main(String[] argv) @@ -8,6 +9,11 @@ class load public static Knoten loadKnoten(String datei) { + Knoten k = new Knoten(); + boolean field_unseen[][] = new boolean[5][4]; + for(int x = 0; x < 5; ++x) + for(int y = 0; y < 4; ++y) + field_unseen[x][y] = true; try { File textFile = new File(datei); @@ -23,15 +29,74 @@ class load //System.out.println(new String(data)+"-" +size); //System.out.println(new Integer(data[8])-48); - int counter=0; - while (counter < size) - { - System.out.print(new Integer(data[counter])-48); - counter +=2; + for (int y = 0; y < 4; ++y) { + for (int x = 0; x < 5; ++x) { + switch( data[ ((3-y) * 5 + x) * 2 ] ) { + case 'v': + if(field_unseen[x][y]) { + if(data[ ((3-y) * 5 + x + 1) * 2] == 'v') { + k.set_field(x,y,Knoten.vierer_lu); + k.set_field(x,y+1,Knoten.vierer_lo); + k.set_field(x+1,y+1,Knoten.vierer_ro); + k.set_field(x+1,y,Knoten.vierer_ru); + field_unseen[x+1][y] = false; + field_unseen[x+1][y+1] = false; + field_unseen[x][y] = false; + field_unseen[x][y+1] = false; + } else { + k.set_field(x,y,Knoten.vierer_ru); + k.set_field(x,y+1,Knoten.vierer_ro); + field_unseen[x][y] = false; + field_unseen[x][y+1] = false; + } + } + break; + case 'w': + if(field_unseen[x][y]) { + k.set_field(x, y,Knoten.zweier_links); + k.set_field(x+1,y,Knoten.zweier_rechts); + field_unseen[x][y] = false; + field_unseen[x+1][y] = false; + } + break; + case 's': + if(field_unseen[x][y]) { + k.set_field(x,y,Knoten.zweier_unten); + k.set_field(x,y+1,Knoten.zweier_oben); + field_unseen[x][y] = false; + field_unseen[x][y+1] = false; + } + break; + case 'e': + k.set_field(x,y,Knoten.einer); + field_unseen[x][y] = false; + break; + default: + break; + } + } + } + int count_leere = 0; + k.set_leere(2,-1,-1); + k.set_leere(3,-1,-1); + for(int x = 0; x < 5; ++x) { + for(int y = 0; y < 4; ++y) { + if(field_unseen[x][y]) { + k.set_field(x,y,Knoten.leer); + if(count_leere < 4) { + k.set_leere(count_leere, x, y); + count_leere++; + } else { + System.out.println("Zu viele leere Felder! Fehler beim Parsen"); + } + } + } } } catch (IOException ex) {ex.printStackTrace();} - - return null; + +/* System.out.println("Das kommt raus:\n" + k.toString()); */ + + return k; } -} \ No newline at end of file +} diff --git a/schiebe.java b/schiebe.java index 2c084c9..78730f4 100644 --- a/schiebe.java +++ b/schiebe.java @@ -131,8 +131,8 @@ class schiebe { ziel_final.set_field(3,0,Knoten.leer); ziel_final.set_field(4,0,Knoten.leer); - Knoten.set_start(start_final); - Knoten.set_ziel(ziel_final); + Knoten.set_start(load.loadKnoten("start")); + Knoten.set_ziel(load.loadKnoten("ziel")); /* Hiermit beginnen wir */ System.out.println("Hiermit beginnen wir: \n" + Knoten.getStart().toString()); @@ -154,7 +154,9 @@ class schiebe { } else if (argv[0].equals("dfs") ) { Knoten.setHeuristikTyp(Knoten.HEURISTIK_SIMPEL); dfs(Knoten.getStart()); - } + } else if (argv[0].equals("schiebe4")) { + schiebe4(); + } else System.out.println("Falsche Optionen angegeben."); } else { /* Default: */ asternluft(30); @@ -198,13 +200,40 @@ class schiebe { } return pfad; } + +private static void schiebe4() +{ + LinkedList knotenListe = new LinkedList(); + LinkedList ergebnisse = new LinkedList(); + knotenListe.add(Knoten.getStart()); + Knoten.setHeuristikTyp(Knoten.HEURISTIK_SIMPEL); + LinkedList expandListe = null; + while (knotenListe.size()> 0) + { + Knoten k = knotenListe.poll(); + expandListe = trs.expandKnoten(k); + for (Knoten l:expandListe) + { + for (int y=0;y<4;y++) + { + if (l.get_field(2,y) == +Knoten.vierer_lu) + { + ergebnisse.add(l); + System.out.println(l); + } + } + + } + knotenListe.addAll(expandListe); + } +} /** * Durchsucht den Suchraum bis Tiefe 7 per Breitensuche. Von dort aus wird eine A* * Suche mit Luftlinienheuristik angestoßen mit dem Nachteil, * dass ab hier die Teilbäume getrennt von einander untersucht werden */ - - + private static void asternluft(int maxTiefe) { // Alle Knoten der Tiefe 7 entwickeln LinkedList schichtListe= new LinkedList(); @@ -366,7 +395,7 @@ class schiebe { */ private static int asternluft2(int maxTiefe,boolean mincut) { // Alle Knoten der Tiefe 8 entwickeln - LinkedList schichtListe= new LinkedList(); + LinkedList schichtListe= new LinkedList(); LinkedList pfad; schichtListe.add(Knoten.getStart()); Knoten.setHeuristikTyp(Knoten.HEURISTIK_LUFT); diff --git a/start b/start new file mode 100644 index 0000000..d819f64 --- /dev/null +++ b/start @@ -0,0 +1,4 @@ +w w w w e +v v s e l +v v s e l +w w w w e diff --git a/start_final b/start_final new file mode 100644 index 0000000..d819f64 --- /dev/null +++ b/start_final @@ -0,0 +1,4 @@ +w w w w e +v v s e l +v v s e l +w w w w e diff --git a/ziel b/ziel new file mode 100644 index 0000000..479781d --- /dev/null +++ b/ziel @@ -0,0 +1,4 @@ +w w s e e +w w s v v +w w e v v +w w e l l diff --git a/ziel_final b/ziel_final new file mode 100644 index 0000000..479781d --- /dev/null +++ b/ziel_final @@ -0,0 +1,4 @@ +w w s e e +w w s v v +w w e v v +w w e l l -- 2.11.4.GIT