Bewegen durch das Labyrinth

Status
Nicht offen für weitere Antworten.
J

javaHK

Gast
hi,

habe mich mal an die zweite Aufgabe des Informatikwettbewerbs herangewagt, doch bin jetzt auf Probleme
gestoschen beim Durchgehen des Labyrinths.




Hier mein Code

Code:
public class Ludwig {
	static int goon =0;
	static int ziel = 14;
	static Point mp = new Point (3,3);
	
	
	
	
	
		
		public static BitSet wände (int k)   // Methode damit man die Wände erkennen kann. Wenn z.B. der Wert
                                                                       7 übergeben wird, dann werden die ersten drei Bits auf true gesetzt.
                                                                          2 hoch 0 + 2 hoch 1 + 2 hoch2 = 7
                                                                           linke Wandseite = 3
                                                                           Obere Wandseite = 2
                                                                           Untere Wandseite =1
                                                                           rechte Wandseite =0
                                                                            Wenn dann jetzt in diesem zweidimensionalen Array die 7 auftaucht, weiß ich das links, recht und unten eine Wand ist.
                                                                                     

			{
		
				BitSet bs = new BitSet();
				int numb =0;
				for (int i=4;i>=0;i--)
				{
			
			
					if (Math.pow(2,i)<= (k-numb))
					{
						bs.set( i);
						numb = (int) (numb+Math.pow(2,i));
				
					}
					if (numb==k)
					break;
			
			
				}
		
		
				System.out.println (bs);
		
		
		
				return bs;
		
			}
	
	public static void main (String args [])
	{
		
		 int Feldyx [][] = { {12,6,5,13},           //Habe erst einmal ein kleineres Labyrinth genommen. 
						  {8,5,9,9},
						  {9,11,8,1},
						  {11,14,3,11}
						  
		};
		
		int Startpos = 11; 
		Point p [] = new Point [16];
		
		
		
		
		
		
		for (int i =0;i<4;i++) Hier wird ermittelt, wo die Startposition liegt, aber noch nicht festgelegt um welche 11 es sich genau handelt.
		{
			for (int x=0; x<4;x++)
			{
				if (Feldyx[i][x]== Startpos)
				{
					p[goon] = new Point (x,i);
					
					System.out.println(p[goon]); 
					goon++;
				}
				
				
			}
			
		
		}
		//wände(3);
		
		
		BitSet wand = new BitSet();
		wand = wände (14); // In der Var befinden sich die Wände für die Zahl in Klammern 
		
		//if (!wand.get( ))
			
		do
		{
		

		
		}while (mp.x==2 && mp.y ==1); Ziel, hier steht das Futter der Maus, also an diesen Koordinaten
		
		
		
		
		
		
		
		
		
		
		
		
		}


}





Wie kann ich mich jetzt durch das Labyrinth bewegen? Also wie kann ich einen Schritt vorwärts machen dann die Wände überprüfen und dann nach z.B. links gehen? Kann ich das mit dem Point Objekt machen, also das dieses immer verschoben wird?

Welche Suchstrategie könnte ich anwenden um durch das Labyrinth zu kommen?

http://www.bwinf.de/aufgaben/runde1/bwi201/html/aufgabe_2.html Der Link der Aufgabenstellung

[Edit by Beni: URL reparriert]
 
G

Guest

Gast
Wie kann ich mich durch das Labyrinth bewegen, welche Suchstrategie muss ich benutzen?
 
G

Guest

Gast
Rekursion.

- Du gehst bei jedem Rekursionsschritt ein Feld weiter. Immer, wo es gerade geht und wo Du bisher nicht warst.
(links, vor, rechts)
- Reihenfolge immer einheitlich. Richtung ändert sich nach dem Abbiegen
- Du merkst Dir jede Position, die Du besucht hast
- Betritts Du die gleiche Stelle erneut, gest Du einen Schritt zurück (Rekursionsschritt zurück)

Das ganze solange Du nicht wieder im Ursprung landest oder das Ziel gefunden hast.

Alternative: GPS oder Geruchssensor. ;)
 
G

Guest

Gast
So ungefähr sollte es gehen
Code:
Position schritt(Position pos, int richtung)
{
  // Da war ich schon, raus hier
  if(warSchonHier(pos))
    return null;
  // Aktuelle Position als besucht markieren
  setWarSchonHier(pos);

  // Käse gefunden?
  Position gefunden = kaeseDa(pos);

  // Nach links
  if(gefunden!=null && gehtEsLinks(pos, richtung))
    gefunden = schritt(nachLinks(pos, richtung), nachLinks(richtung));

  // Vor
  if(gefunden!=null && gehtEsVorwaerts(pos, richtung))
    gefunden = schritt(vorwarts(pos), richtung);

  // Nach rechts
  if(gefunden!=null && gehtEsRechts(pos, richtung))
    gefunden = schritt(nachRechts(pos, richtung), nachRechts(richtung));

// Den Wegpunkt ausgeben
  if(gefunden!=null)
    ausgabe(pos); 

  return gefunden;
}
Der Weg zum Käse wird dabei Rückwärts ausgegeben.
 
G

Guest

Gast
Ehmm bei 'links', 'vor' und 'rechts' jeweils

if(gefunden==null &&
 
G

Guest

Gast
Danke, aber was muss ich bei "warschohier" für eine Methode schreiben oder nach "esgehtlinks" ?
 
G

Guest

Gast
Code:
public class Ludwig {
	static int goon =0;
	static int ziel = 14;
	static Point mp = new Point (3,3);
	static int Feldyx [][] = { {12,6,5,13},
	{8,5,9,9},
	{9,11,8,1},
	{11,14,3,11}};
	
	
	
	/*public static BitSet wände (int wert)
		{
			BitSet bs = new BitSet ();
			int pos =7;
			/*if (pos<=8)
			{
				bs.set (1);
				pos = pos-8;
			}
			else
			bs.set (0);
		
		
			int arr [] = {8,4,2,1};
			int on=0;
			for (int i =0;i<4;i++)
			{
				if (pos >=arr[on])
				{
					bs.set( i);
					pos = pos-arr[on];
					System.out.println (1);
					on++;
				}
				else
				{
			
				bs.set( i);
				System.out.println (0);
				on++;
				}
			}
		
		
		System.out.println (bs);
		
		
		
		
		
			return bs;
		
		}*/
		
		public static BitSet wände (int k)
			{
		
				BitSet bs = new BitSet();
				int numb =0;
				for (int i=4;i>=0;i--)
				{
			
			
					if (Math.pow(2,i)<= (k-numb))
					{
						bs.set( i);
						numb = (int) (numb+Math.pow(2,i));
				
					}
					if (numb==k)
					break;
			
			
				}
		
		
				System.out.println (bs);
		
		
		
				return bs;
		
			}
	
	public static void main (String args [])
	{
		
		 int Feldyx [][] = { {12,6,5,13},
						  {8,5,9,9},
						  {9,11,8,1},
						  {11,14,3,11}
						  
		};
		
		int Startpos = 11;
		Point p [] = new Point [16];
		
		/*for (int i =0;i<4;i++)
		{
			if (Feldyx[i][0] == Startpos)
				//p[0] = new Point (0,i);
			
			System.out.println (p);
					
		}*/
		
		
		
		
		for (int i =0;i<4;i++)
		{
			for (int x=0; x<4;x++)
			{
				if (Feldyx[i][x]== Startpos)
				{
					p[goon] = new Point (x,i);
					
					System.out.println(p[goon]); 
					goon++;
				}
				
				
			}
			
		
		}
		//wände(3);
		
		
		BitSet wand = new BitSet();
		//wand = wände (14); // In der Var befinden sich die Wände für die Zahl in Kla. 
		
		//if (!wand.get( ))
			
		/*do
		{
			int twand = Feldyx [1][1];
		
			if ( !wand.get(2))
				{
					mp.x--;
					mp.y = 2;
					System.out.println ("Maus" + mp);
				}
		Wert_für_Labyrinthkoordinate (mp.y, mp.x);
		System.out.println ("e"+twand);
		
		
		}while (mp.x==2 && mp.y ==1);*/
		int xL = 3;
		int yL = 3;
		
		do
		{
			
			
			wand = wände (Feldyx [yL][xL]);
			
			if (!wand.get( 2))
			{
				System.out.println ("Nord");
				yL--;		
			}
			
			
			
		}while (true);
		
		
		
		
		
		
		
		
		}


		public static int Wert_für_Labyrinthkoordinate (int Koy, int Kox)
		{
			
			int returnK = Feldyx [Koy] [Kox];
			
			
			System.out.println ("kor"+returnK);
			
			
			
			
			
			return returnK;
			
		}
}
 
G

Guest

Gast
Anonymous hat gesagt.:
Danke, aber was muss ich bei "warschohier" für eine Methode schreiben oder nach "esgehtlinks" ?
Mit warSchonHier(pos) prüfst Du, ob Du an der gegebenen Position bereits warst.
Wenn nicht, dann markierst Du diese Position als 'besucht' und gehst solange zurück,
bis eine der früheren Positionen einen aternativen Gang anbietet.

Mit gehtEsNachLinks() etc. stellst Du fest, ob man, ausgehend von der aktuellen Position,
nach links/rechts/vorne gehen kann oder ist da 'ne Wand.

Das läuft alles rekursiv, so dass Du Dich nur um die Bedingungen für's abbiegen und
die Ermittlung besuchter Punkte kümmern mußt. Ehmm und ob Käse da ist.

Ist ja einfach wie Fi... ;)

So wie ich das verstanden habe, sind diese Aufgaben alleine zu erledigen, daher kann
Dir hier jeder nur einen Tip geben, nicht aber die komplette Lösung.
Die Aufgaben finde ich aber etwas heavy für die genannte Zielgruppe. Da wird sicherlich
geschummelt, was das Zeug hält. Wenn Euch irgendwelche gestressten IT-Papas, nach
Käse-Such-Algorithmen fragen, dann wisst Ihr Bescheid :bae:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Durch 2-Dimensionales Array "bewegen" will nicht so recht hinhauen Java Basics - Anfänger-Themen 2
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
D wie kann man in Pong mit eclipse den schläger bewegen Java Basics - Anfänger-Themen 1
IamArctic Quaxli Tutorial, Rotorblätter bewegen sich nicht mehr Java Basics - Anfänger-Themen 4
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
S ProgrammierHilfe dringend gesucht ( Icon bewegen) Java Basics - Anfänger-Themen 9
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
I in Richtung bewegen Java Basics - Anfänger-Themen 2
Franzi1001 ScrollBar lässt sich nicht bewegen Java Basics - Anfänger-Themen 4
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
Y Kreis auf einer Kreisbahn bewegen Java Basics - Anfänger-Themen 5
H Spieler bewegen :) Java Basics - Anfänger-Themen 6
R JTree bewegen Java Basics - Anfänger-Themen 6
GRAZZ0R MouseListener - Rechteck Bewegen Java Basics - Anfänger-Themen 1
J Spieler bewegen Java Basics - Anfänger-Themen 3
N String auf JPanel bewegen Java Basics - Anfänger-Themen 6
G zwei Objekte bewegen - der eine bewegt sich nicht flüssig? Java Basics - Anfänger-Themen 10
F Objekt in Richtung eines anderen Objekts bewegen Java Basics - Anfänger-Themen 4
A Auto bewegen (mit SuM) Java Basics - Anfänger-Themen 27
K Bild mit Maus innerhalb eines Rahmens bewegen Java Basics - Anfänger-Themen 5
G Figuren bewegen-Aufgabe mit static Java Basics - Anfänger-Themen 9
D Kreis mit Pfeiltaste bewegen Java Basics - Anfänger-Themen 3
JAVAnnik Problem beim Objekt bewegen Java Basics - Anfänger-Themen 20
E JFrame Fenster bewegen Java Basics - Anfänger-Themen 8
G Shape bewegen Java Basics - Anfänger-Themen 4
F Bilder enfügen und Bewegen Java Basics - Anfänger-Themen 6
N OOP Objekte entlang Pfaden bewegen Java Basics - Anfänger-Themen 15
B Button bewegen Java Basics - Anfänger-Themen 8
H Grafik auf einem JPanel bewegen. Java Basics - Anfänger-Themen 7
L Balken mit Pfeiltasten bewegen Java Basics - Anfänger-Themen 3
P Fenster bewegen Java Basics - Anfänger-Themen 4
S Mehrere Bilder bewegen Java Basics - Anfänger-Themen 5
Spin Objekte bewegen lassen Java Basics - Anfänger-Themen 16
A grafik 2d Objekte mit der Maus bewegen Java Basics - Anfänger-Themen 4
N Objekte bewegen funktioniert nicht Java Basics - Anfänger-Themen 5
U Neuling: Hintergrund bewegen Java Basics - Anfänger-Themen 14
G Maus mit java bewegen Java Basics - Anfänger-Themen 6
W Jlabel bewegen Java Basics - Anfänger-Themen 8
B KeyListener (etwas bewegen) Java Basics - Anfänger-Themen 10
7 Benutzer kann Button bewegen Java Basics - Anfänger-Themen 4
H Bewegen einer Figur Java Basics - Anfänger-Themen 3
R Buttons können sich bewegen und JButtons nicht? Java Basics - Anfänger-Themen 5
K striche die sich auf dem hintergrundbild bewegen Java Basics - Anfänger-Themen 10
A Kreis mit gedrückter Maustaste bewegen. Java Basics - Anfänger-Themen 2
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
A 1 Leerzeichen durch zwei Leerzeichen ersetzen Java Basics - Anfänger-Themen 4
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
obiwanke Ziffern durch ASCII Character ersetzen Java Basics - Anfänger-Themen 8
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
K mit <<1 kann man mal 2 machen, mit >>2 geteilt durch zwei und was bewirkt <<<1 und >>>1? Java Basics - Anfänger-Themen 5
A Verarbeiten einer Excel Datei durch das java-Programm Java Basics - Anfänger-Themen 3
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
C if-Konstrukt durch switch-Konstrukt ersetzen Java Basics - Anfänger-Themen 14
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
F Methode für Teilbarkeit durch 5 tut was anderes.... Java Basics - Anfänger-Themen 3
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
H Wie kann ich durch Methoden definiren? Java Basics - Anfänger-Themen 8
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
M String array durch Eingabe begrenzen Java Basics - Anfänger-Themen 7
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
O Typparameter durch Wildcards verallgemeinern Java Basics - Anfänger-Themen 3
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
B Import Tabelle - Struktur durch User einstellbar Java Basics - Anfänger-Themen 4
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
F Ein Datum (int) durch Methode als String formatieren Java Basics - Anfänger-Themen 2
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben