Ветеран
Сообщения: 27449
Благодарности: 8088
|
Профиль
|
Отправить PM
| Цитировать
Цитата vista54:
Iska, пример кода хотябы напиши) »
|
Держите:
читать дальше »
Код: 
Option Explicit
Const strStar = "█"
Const strDot = "░"
Const strFoundStar = "◘"
Dim arrMatrix(3, 6)
Dim lngCount
Dim intTab
Dim i, j
FillRandom arrMatrix
DisplayArray arrMatrix
lngCount = 0
intTab = 0
For i = LBound(arrMatrix, 1) To UBound(arrMatrix, 1)
For j = LBound(arrMatrix, 2) To UBound(arrMatrix, 2)
If arrMatrix(i, j) = strStar Then
lngCount = lngCount + 1
'WScript.StdOut.WriteLine lngCount
'WScript.StdOut.WriteLine String(UBound(arrMatrix, 2) + 1,"-")
'DisplayArray arrMatrix
'WScript.StdOut.WriteLine String(UBound(arrMatrix, 2) + 1,"-")
Recurse i, j
End If
Next
'WScript.StdOut.WriteLine
Next
WScript.StdOut.WriteLine
WScript.StdOut.WriteLine "Found " & lngCount & " continues of [" & strStar & "]."
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub Recurse(i, j)
arrMatrix(i, j) = strFoundStar
intTab = intTab + 1
'DisplayArray arrMatrix
If i - 1 >= LBound(arrMatrix, 1) Then
If arrMatrix(i - 1, j) = strStar Then
Recurse i - 1, j
End If
End If
If j - 1 >= LBound(arrMatrix, 2) Then
If arrMatrix(i, j - 1) = strStar Then
Recurse i, j - 1
End If
End If
If i + 1 <= UBound(arrMatrix, 1) Then
If arrMatrix(i + 1, j) = strStar Then
Recurse i + 1, j
End If
End If
If j + 1 <= UBound(arrMatrix, 2) Then
If arrMatrix(i, j + 1) = strStar Then
Recurse i, j + 1
End If
End If
intTab = intTab - 1
End Sub
'=============================================================================
'=============================================================================
Sub DisplayArray(arrMatrix())
Dim i, j
For i = LBound(arrMatrix, 1) To UBound(arrMatrix, 1)
WScript.StdOut.Write Space(intTab * 4)
For j = LBound(arrMatrix, 2) To UBound(arrMatrix, 2)
WScript.StdOut.Write arrMatrix(i, j)
Next
WScript.StdOut.WriteLine
Next
End Sub
'=============================================================================
'=============================================================================
Sub FillRandom(arrMatrix())
Dim i, j
Randomize Timer
For i = LBound(arrMatrix, 1) To UBound(arrMatrix, 1)
For j = LBound(arrMatrix, 2) To UBound(arrMatrix, 2)
If Rnd() - 0.5 > 0 Then
arrMatrix(i, j) = strStar
Else
arrMatrix(i, j) = strDot
End If
Next
Next
End Sub
'=============================================================================
Это скрипт на WSH, исполнение только под консолью; перевод за Вами  . Если хотите посмотреть шаги:
читать дальше »
Код: 
░█░██░░
░█░█░██
██░░██░
█░░█░░█
1
-------
░█░██░░
░█░█░██
██░░██░
█░░█░░█
-------
░◘░██░░
░█░█░██
██░░██░
█░░█░░█
░◘░██░░
░◘░█░██
██░░██░
█░░█░░█
░◘░██░░
░◘░█░██
█◘░░██░
█░░█░░█
░◘░██░░
░◘░█░██
◘◘░░██░
█░░█░░█
░◘░██░░
░◘░█░██
◘◘░░██░
◘░░█░░█
2
-------
░◘░██░░
░◘░█░██
◘◘░░██░
◘░░█░░█
-------
░◘░◘█░░
░◘░█░██
◘◘░░██░
◘░░█░░█
░◘░◘█░░
░◘░◘░██
◘◘░░██░
◘░░█░░█
░◘░◘◘░░
░◘░◘░██
◘◘░░██░
◘░░█░░█
3
-------
░◘░◘◘░░
░◘░◘░██
◘◘░░██░
◘░░█░░█
-------
░◘░◘◘░░
░◘░◘░◘█
◘◘░░██░
◘░░█░░█
░◘░◘◘░░
░◘░◘░◘█
◘◘░░█◘░
◘░░█░░█
░◘░◘◘░░
░◘░◘░◘█
◘◘░░◘◘░
◘░░█░░█
░◘░◘◘░░
░◘░◘░◘◘
◘◘░░◘◘░
◘░░█░░█
4
-------
░◘░◘◘░░
░◘░◘░◘◘
◘◘░░◘◘░
◘░░█░░█
-------
░◘░◘◘░░
░◘░◘░◘◘
◘◘░░◘◘░
◘░░◘░░█
5
-------
░◘░◘◘░░
░◘░◘░◘◘
◘◘░░◘◘░
◘░░◘░░█
-------
░◘░◘◘░░
░◘░◘░◘◘
◘◘░░◘◘░
◘░░◘░░◘
Found 5 continues of [█].
— раскомментируйте закомментированный вывод.
Алгоритм простой — движемся по массиву сверху вниз/слева направо. Найдя элемент с потребным содержимым, увеличиваем счётчик найденного и меняем содержимое элемента (дабы не учитывать его повторно), затем опрашиваем его «соседей» сверху, снизу, справа и слева. Если «сосед» также окажется элементом с потребным содержимым — вызываем аналогичную процедуру для него. Повторяем, пока не дойдём до конца массива.
P.S. Можно увидеть, что алгоритм не совсем оптимален — для «соседа» всегда будет проверяться его элемент-«сосед», с которого и «пришли» к данному элементу. Этого можно избежать, указывая дополнительно, с какого направления мы «пришли» к данному элементу. Но я не стал усложнять алгоритм, поскольку в данном случае сие малосущественно.
|