2016-05-21 8 views
0

Ich habe Probleme, den kürzesten Weg zwischen zwei Quadraten im Raster zu finden.Lee's Algorithmus - Finden von Zeichen in der Tabelle

Ich möchte Lee's Algorithmus implementieren, aber mein Kampf ist es, die Nachbarn der spezifischen Koordinate in der Tabelle zu finden.

Was bin ich nicht ganz sicher, wohin den Cursor im Raster bewegen, wenn ich die Nachbarn mit einer bestimmten Nummer beschrifte. Ich habe vier Bewegungen im Raster, also beschrifte ich immer vier Nachbarn des aktuellen Punktes, aber wohin soll ich dann gehen?

Beispiel:

Mein Eingang:

Größe des Gitters: MXN

Charaktere, die in der Tabelle sein würden. Zum Beispiel ABCDEF ... (Es ist eine Art Keyboard)

String, der durch die Tabelle geschrieben werden würde:

Zum Beispiel: BCD

Ausgabe des Programms würde mindestens drückt, dies zu schreiben spezifische Zeichenfolge. Startposition des Cursors im Raster befindet sich in der oberen linken Ecke. Pressen sind: hoch, runter, links, rechts und ENTER - das wird das Zeichen

drucken Mein Startansatz ist: Finden Sie zuerst die Position des Zeichens der Zeichenfolge in der Tabelle. Dann mach eine Matrix mit Abständen, die am Anfang überall Nullen hat. Dann überprüfe, ob das gefundene Zeichen in der oberen linken Ecke ist. Wenn ist, dann ist die Anzahl der Pressen 1, finde ein anderes Zeichen. Else label Nachbarn und bekomme den aktuellen Brief. Wenn Sie zum aktuellen Buchstaben gelangen, speichern Sie die Anzahl der Pressen und suchen Sie das nächste Zeichen von der Position des vorherigen Zeichens.

Antwort

0

Siehe meine Schaltfläche Projekt unten. Lesen Sie Kommentare. Sie können mit einem Textfeld implementieren, so dass Sie Buchstaben in die Felder einfügen können, oder ein Bildfeld, wo Sie Bilder zu den Zellen hinzufügen können.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace Buttons 
{ 
    public partial class Form1 : Form 
    { 
     const int ROWS = 5; 
     const int COLS = 10; 

     public Form1() 
     { 
      InitializeComponent(); 
      this.Load += new System.EventHandler(this.Form1_Load); 
     } 
     public void Form1_Load(object sender, EventArgs e) 
     { 
      new MyButton(ROWS, COLS, this); 
     } 


    } 
    public class MyButton : Button 
    { 
     const int WIDTH = 50; 
     const int HEIGHT = 50; 
     const int SPACE = 5; 
     const int BORDER = 20; 

     public static List<List<MyButton>> buttons { get; set; } 
     public static List<MyButton> buttonList { get; set; } 
     public Form1 form1; 
     public int row { get; set; } 
     public int col { get; set; } 
     public Boolean[] neighbors { get; set; } //array 0 to 3, 0 top, 1 right, 2 bottom, 3 left with false is no wall true is wall 
     public MyButton() 
     { 
     } 
     public MyButton(int rows, int cols, Form1 form1) 
     { 
      buttons = new List<List<MyButton>>(); 
      buttonList = new List<MyButton>(); 

      this.form1 = form1; 
      for (int row = 0; row < rows; row++) 
      { 
       List<MyButton> newRow = new List<MyButton>(); 
       buttons.Add(newRow); 
       for (int col = 0; col < cols; col++) 
       { 
        MyButton newButton = new MyButton(); 
        newButton.Height = HEIGHT; 
        newButton.Width = WIDTH; 
        newButton.Top = row * (HEIGHT + SPACE) + BORDER; 
        newButton.Left = col * (WIDTH + SPACE) + BORDER; 
        newButton.row = row; 
        newButton.col = col; 
        newRow.Add(newButton); 
        buttonList.Add(newButton); 
        newButton.Click += new System.EventHandler(Button_Click); 
        form1.Controls.Add(newButton); 
       } 
      } 
      neighbors = new Boolean[4]; 
      for (int i = 0; i < 0; i++) 
      { 
       neighbors[i] = true; 
      } 
     } 
     public void Button_Click(object sender, EventArgs e) 
     { 
      MyButton button = sender as MyButton; 
      MessageBox.Show(string.Format("Pressed Button Row {0} Column {1}", button.row, button.col)); 

     } 

    } 
} 
Verwandte Themen