2017-04-13 6 views
0

Ich bin völlig neu in herauszufinden, wie Graph funktioniert (DFS). Ich habe viele Tutorials darüber gelesen, wie man mit DFS einen Labyrinth-Pfad-Such-Löser erstellt, und es gibt einen Teil, den ich nicht bekomme. Wie in der Welt finde ich heraus, wer die Nachbarn einer Ecke sind? Forinstens Ich habe dieses Labyrinth: mazeDFS Labyrinth Problem, wie Nachbarn zu finden

Ich habe alle Zeichenfolgen in einem zweidimensionalen Array namens "Namen" platziert. Also, wenn ich forinstens schreiben:

names[0,0] // it contains the string + 

wenn ich schreibe:

names[0,1] // it contains the string  - 

wenn ich schreibe:

names[1,0] //it contains the string  B 

usw. Aber wie Namen nicht [1,0] kennt seine Nachbarn Namen [0,0], Namen [2,0] und Namen [1,1]?

+0

Sie bauen mit vier Eigenschaften eine Node-Klasse: Ein intelligentes Packschema verwendet wie oben line = 1, rechtse Linie zu machen = 2, unter dem Strich = 4, linke Linie = 8. Das gesamte Labyrinth kann wie folgt definiert werden : Oben, Unten, Links, Rechts, zeigt an, ob ein Knoten für jede der vier Richtungen einen Nachbarn hat. Dein Labyrinth ist Node [,] Labyrinth. – jdweng

+0

@jdweng aber wie weiß ein Knoten, ob er einen Nachbarn hat? Forinstens sagen wir haben einen gerichteten Graphen, wo A auf B zeigt. Wie weiß A, dass es auf B zeigt und wie weiß B, dass es nicht auf a zeigt? Es sei denn, ich gehe natürlich hinein und füge jeden Nachbarn manuell zu jedem Knoten hinzu. aber da es wie 400 Knoten ist, scheint es eine schlechte Idee zu sein. – cop77

+0

Nein. Schauen Sie sich das Labyrinth sorgfältig an. Einige Pluszeichen haben eine vertikale/horizontale Linie zwischen ihnen und andere nicht. Ein Knoten ist das Quadrat zwischen 4 Pluszeichen. Es gibt 4 Eigenschaften, die boolesche (Nachbarn) sind: Oben, Unten, Links, Rechts, die eine vertikale/horizontale Linie haben können. Wenn die vertikale/horizontale Linie vorhanden ist, ist der Wahrheitswert wahr, was anzeigt, dass es keinen Nachbarn gibt, da die Richtung blockiert ist. Wenn ein Nachbar (keine Linie) vorhanden ist, können Sie 1 addieren/subtrahieren, um die Nachbarposition in dem Array zu erhalten. – jdweng

Antwort

0

begann ich den Code und geladen 1. Reihe von Labyrinth aus dem Link

bereitgestellt
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 



namespace ConsoleApplication49 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      Cell maze = new Cell(); 
      maze.Load(); 

     } 

    } 
    public class Cell 
    { 
     public static Cell[,] maze = new Cell[10, 10]; 

     public static KeyValuePair<int, int> start = new KeyValuePair<int, int>(); 
     public static KeyValuePair<int, int> end = new KeyValuePair<int, int>(); 

     public bool topBlock { get; set; } 
     public bool rightBlock { get; set; } 
     public bool bottomBlock { get; set; } 
     public bool leftBlock { get; set; } 

     public void Load() 
     { 
      start = new KeyValuePair<int, int>(0, 0); 
      end = new KeyValuePair<int, int>(9, 9); 

      maze[0, 0] = new Cell() { topBlock = true, rightBlock = true, bottomBlock = false, leftBlock = false }; 
      maze[0, 1] = new Cell() { topBlock = true, rightBlock = false, bottomBlock = false, leftBlock = true }; 
      maze[0, 2] = new Cell() { topBlock = true, rightBlock = true, bottomBlock = false, leftBlock = false }; 
      maze[0, 3] = new Cell() { topBlock = true, rightBlock = true, bottomBlock = false, leftBlock = true }; 
      maze[0, 4] = new Cell() { topBlock = true, rightBlock = false, bottomBlock = false, leftBlock = true }; 
      maze[0, 5] = new Cell() { topBlock = true, rightBlock = false, bottomBlock = true, leftBlock = false }; 
      maze[0, 6] = new Cell() { topBlock = true, rightBlock = true, bottomBlock = false, leftBlock = false }; 
      maze[0, 7] = new Cell() { topBlock = true, rightBlock = false, bottomBlock = false, leftBlock = true }; 
      maze[0, 8] = new Cell() { topBlock = true, rightBlock = false, bottomBlock = true, leftBlock = false }; 
      maze[0, 9] = new Cell() { topBlock = true, rightBlock = true, bottomBlock = false, leftBlock = false }; 
     } 
    } 

} 
0

Sie müssen für die Definition ein Labyrinth, ein Verfahren haben. Es könnte eine Eingabedatei statt einer harten Codierung sein.

  int[,] maze = { 
          {0x39,0x3B,0x95,0x39,0x53}, 
          {0xC6,0xC4,0x6B,0xAB,0x32}, 
          {0x95,0x3D,0x3A,0x83,0xAA}, 
          {0xAB,0x85,0x6C,0x68,0x6A}, 
          {0xAA,0xC5,0x39,0x3A,0x96}, 
          {0xC6,0x93,0xC6,0xC2,0xAB}, 
          {0xD5,0x2C,0x17,0x92,0xC6}, 
          {0x95,0x6D,0x45,0x6C,0x3B}, 
          {0xC5,0x55,0x39,0x57,0x86}, 
          {0xD5,0x55,0x6C,0x55,0x45} 
          }; 
Verwandte Themen