Advertisement
LT1stSoloMID

BFS

Aug 20th, 2015
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 2.52 KB | None | 0 0
  1.    OpenFileDialog1.Filter = "文字檔案(*.txt)|*.txt"
  2.         Label1.Text = "" : Label2.Text = "" : Label3.Text = "" : Label4.Text = ""
  3.         Dim txtname As String = ""
  4.         If OpenFileDialog1.ShowDialog = DialogResult.OK Then txtname = My.Computer.FileSystem.ReadAllText(OpenFileDialog1.FileName)
  5.         Label4.Text = OpenFileDialog1.SafeFileName
  6.         Label1.Text = txtname
  7.         Dim Map(8, 8), Cinx(2, 8, 8), count As Integer : Dim Memory(8, 8) As Boolean
  8.         Dim Maze As String = Replace(Replace(txtname, Chr(13), ""), Chr(10), "")
  9.         For i = 1 To 8 '讀取與重置
  10.             For j = 1 To 8
  11.                 Memory(i, j) = True
  12.                 count += 1 : Map(i, j) = Mid(Maze, count, 1)
  13.                 If Mid(Maze, count, 1) = "1" Then Memory(i, j) = False
  14.             Next
  15.         Next
  16.         Dim qx, qy As String : qx = 1 : qy = 1 'Stack
  17.         Dim dx() As Integer = {0, -1, 0, 1} : Dim dy() As Integer = {-1, 0, 1, 0} '移動方向
  18.         Cinx(0, 0, 0) = 0 : Cinx(1, 0, 0) = 0
  19.         Dim nx, ny, MIDcount, Bug As Integer : nx = 1 : ny = 1
  20.         Do While Len(qx) <> 0 And Len(qy) <> 0 'BFS
  21.             MIDcount += 1 : Bug += 1
  22.             nx = Val(Mid(qx, MIDcount, 1)) : ny = Val(Mid(qy, MIDcount, 1))
  23.             If nx = 8 And ny = 8 Then Exit Do
  24.             For i = 0 To 3
  25.                 If nx + dx(i) <= 8 And nx + dx(i) >= 1 And ny + dy(i) <= 8 And ny + dy(i) >= 1 Then
  26.                     If Memory(nx + dx(i), ny + dy(i)) = True Then
  27.                         qx = qx & (nx + dx(i)) : qy = qy & (ny + dy(i))
  28.                         Memory(nx, ny) = False
  29.                         Cinx(0, nx + dx(i), ny + dy(i)) = nx
  30.                         Cinx(1, nx + dx(i), ny + dy(i)) = ny
  31.                     End If
  32.                 End If
  33.             Next
  34.             If Bug > 100 Then Label2.Text = "No way" : Exit Sub
  35.         Loop
  36.         Dim x, y, fx, fy As Integer : x = 8 : y = 8
  37.         Dim NewMap(8, 8), MazeStep As Integer
  38.         For i = 1 To 8
  39.             For j = 1 To 8
  40.                 NewMap(i, j) = 0
  41.             Next
  42.         Next
  43.         NewMap(8, 8) = 5
  44.         Do While x <> -1 And y <> -1
  45.             fx = Cinx(0, x, y) : fy = Cinx(1, x, y)
  46.             x = fx : y = fy : MazeStep += 1
  47.             NewMap(x, y) = 5
  48.             If x = 0 And y = 0 Then Exit Do
  49.         Loop
  50.         For i = 1 To 8
  51.             For j = 1 To 8
  52.                 Label2.Text &= NewMap(i, j)
  53.             Next
  54.             Label2.Text &= vbNewLine
  55.         Next
  56.         Label3.Text = "step" & MazeStep - 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement