Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите решить задачу с массивами (Алгоритм) (http://www.flasher.ru/forum/showthread.php?t=146966)

roonet_ 23.11.2010 09:24

Помогите решить задачу с массивами (Алгоритм)
 
дается массив
0 0 0 0
1 1 0 0
1 1 1 0
2 2 3 3
2 0 0 3
на трейс должен выводиться результат, когда указываешь координаты массива допустим 0
то тогда должна выводится:
1 1 1 1
0 0 1 1
0 0 0 1
0 0 0 0
0 0 0 0

TWETTI 23.11.2010 10:36

Непонятно, что вы хотите.

cleptoman 23.11.2010 10:50

похоже на решение матрицы из вышки, но я не оч это все помню.

roonet_ 23.11.2010 10:50

Цитата:

Сообщение от TWETTI (Сообщение 951666)
Непонятно, что вы хотите.

[1, 2, 2, 0], вобщем дается массив. допустим по координатам указываю двоечку то она
[1, 1, 2, 0], должна проверить своих соседей на совпадение
[0, 4, 2, 3], допустим 2->0 то она вовращается назад и ищет
[4, 4, 2, 3], другой путь 2->2 и идет дальше когда находит
[0, 0, 2, 2] совпадение.
хочется реализовать это программно .... help

-De- 23.11.2010 11:04

Алгоритм Ли/волновой алгоритм?
Вообще по-моему с такими обьяснениями - к специалистам другого профиля.

roonet_ 23.11.2010 11:14

Похож на волновой алгоритм но суть заключается в том что числа в массиве ищут путь по себе одинаковым значениям и нужно реализовать это программно

Добавлено через 2 минуты
похож на этот алгоритм http://www.gamedev.ru/articles/?id=70121

-De- 23.11.2010 13:15

Вам нужна разновидность волнового алгоритма, называемая алгоритмом Ли.
За неуважение к русскому (ну и от лени) напишу не её, а вот это)
Код AS3:

package  {
        import flash.display.*;
        public class Main extends Sprite
        {
                public function Main():void
                {
                        var arr:Array = [[1, 2, 2, 0],
                                                        [1, 1, 2, 0],
                                                        [0, 4, 2, 3],
                                                        [4, 4, 2, 3],
                                                        [0, 0, 2, 2]];
                        process(arr, 0, 1);
                        for (var i:int = 0; i < arr.length; ++i) {
                                trace(arr[i]);
                        }
                }
                public function process(arr:Array, row:int, column:int):void {
                        var w:int = arr.length;
                        var h:int = arr[0].length;
                        var startNum:int = arr[row][column];
                        for (var i:int = 0; i < w; ++i) {
                                for (var j:int = 0; j < h; ++j) {
                                        if (arr[i][j] == startNum) arr[i][j] = 2;
                                        else arr[i][j] = 0;
                                }
                        }
                        arr[row][column] = 1;
                        var hasProgress:Boolean = true;
                        var adds:Array = [[-1,0], [0,-1], [1,0], [0,1]];
                        while (hasProgress) {
                                hasProgress = false;
                                for (i = 0; i < w; ++i) {
                                        for (j = 0; j < h; ++j) {
                                                for each(var add:* in adds) {
                                                        var _x:int = i + add[0];
                                                        var _y:int = j + add[1];
                                                        if (_x >= 0 && _y >= 0 && _x < w && _y < h && arr[i][j] == 2 && arr[_x][_y] == 1) {
                                                                hasProgress = true;
                                                                arr[i][j] = 1;
                                                        }
                                                }
                                        }
                                }
                        }
                        for (i = 0; i < w; ++i) {
                                for (j = 0; j < h; ++j) {
                                        if (arr[i][j] != 1) arr[i][j] = 0;
                                }
                        }
                }
        }
}



Часовой пояс GMT +4, время: 08:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.