Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Сурьёзеый вопрос на ентот раз.   Найти похожие ветки 

 
Мазут Береговой ©   (2004-07-01 00:07) [0]

Нужон алгоритм перевода двух мерного массива в дерево. Совсем тупить начал... целый день сижу и никак не выходит-то..
Ссылку или другое чё...


 
KilkennyCat ©   (2004-07-01 00:29) [1]

по каким критериям?


 
QuasiLamo ©   (2004-07-01 00:39) [2]

так чтоли
             +
0000          |+0-0-0-0
0000          |+0-0-0-0
0000   ====>  |+0-0-0-0
0000          |+0-0-0-0
0000          |+0-0-0-0
или я не понял?


 
Мазут Береговой ©   (2004-07-01 01:06) [3]

Вот примерно так:
Есть массив
A   B2   C4   D1   E1      
A   B2   C4   D1   E2      
A   B1   C5   D2   E3      
A   B1   C5   D2   E4      
A   B1   C5   D2   E5
И надо сделать слева направо дерево.
Примерно так:
A    
B2    
 C4  
  D1  
   E1
   E2
B1    
 C5  
  D2  
   E3
   E4
   E5


 
Мазут Береговой ©   (2004-07-01 01:07) [4]

Вот так понятней буде:
Есть массив
A   B2   C4   D1   E1      
A   B2   C4   D1   E2      
A   B1   C5   D2   E3      
A   B1   C5   D2   E4      
A   B1   C5   D2   E5 И надо сделать слева направо дерево.
Примерно так:
A    
B2    
C4  
 D1  
  E1
  E2
B1    
C5  
 D2  
  E3
  E4
  E5


 
jack128 ©   (2004-07-01 01:28) [5]

Помоему так (пишу на псевдо коде..)
// предположим, что первый столбец - только один узел - корень
for col := 1 to Matr.ColCount - 1 do
begin
 for row := 0 to Matr.RowCount - 1 do
 begin
   CurNode := Matr[col - 1, row];
   CurNode.AddChild(MAtr[col, row]);
 end;
end;


 
KilkennyCat ©   (2004-07-01 01:35) [6]

так же , псевдокодом :)

for col = Low to High do
 for row = low to High do
   if matr[col,row] <> matr[col, row-1] then новая ветка;

тут только первоначальный проход row-1 не совсем прокатит...


 
jack128 ©   (2004-07-01 01:39) [7]

вот нактал пример для TreeView.. Если б его еще оттестить..
var
CurNode: TTreeNode;
row, col: Integer;
begin
 Tree.Items.Clear;
 CurNode := Tree.Items.AddChild(nil, Matr[0,0]);
 for col := 1 to Matr.ColCount - 1 do
 begin
   if Assigned(CurNode.Parent) then CurNode := CurNode.Parent.Item[0];      
   for row := 0 to Matr.RowCount - 1 do
   begin
     if Matr[col - 1, row] <> CurNode.Text then
       CurNode := CurNode.Parent.Item[CurNode.Index + 1];
     Tree.Items.AddChild(CurNode, Matr[col, row]);
   end;
 end;
end;


 
jack128 ©   (2004-07-01 01:43) [8]


> if Assigned(CurNode.Parent) then CurNode := CurNode.Parent.Item[0];
заменить на
if col > 1 then
 CurNode := CurNode.Parent.Item[0].Item[0];


ps бредятина, но вроде должна работать..


 
KilkennyCat ©   (2004-07-01 01:49) [9]

А! я у себя забыл добавить возврат к корню...


> jack128 ©   (01.07.04 01:39) [7]


мне кажется, все таки удобней все сравнения делать внутри массива.


> Мазут Береговой ©  


Есть гарантия, что массив всегда ниспадающий? Или возможен такой?

A   B2   C4   D1   E1      
A   B2   C4   D1   E2
A   B2   C5   D1   E2      
A   B1   C6   D2   E3      
A   B1   C6   D2   E4      
A   B1   C6   D2   E5

A    
.B2    
..C4  
...D1  
....E1
....E2
..С5
...D1
....E2


 
Мазут Береговой ©   (2004-07-01 01:50) [10]

Немного не так. У меня нет так контрола как дерево. Мне надо это все из ASP выкинуть в HTML. Хотя надо посмотреть...
Собственно я уже решил эту задачку.. :-)
Ну, все равно СПАСИБО всем.
А если есть желание, то можно продолжить эту тему. Может у кого еще есть интересные решения.

Мое в общем-то такое (за два прохода).
Обрабатываю сам массив.
1.Читаю сверху вниз каждую колонку и очищаю одинковые ячейки, оставляя верхнюю и проверяя левую, если левая не пустая, то ячейку не очищать.
2. Прохожу сверху вниз ряды и если есть значение в одной из я чеек выкидываю ее в отдельный ряд, чтоб иерархия получилась.

Грубовато наверное, но работает.. :-)


 
iZEN ©   (2004-07-01 01:53) [11]

У меня был рекурсивный алгоритм со строками в массиве (дерево нужно было строить). Лет пять назад написал (придётся искать в архивах).
Нужно?


 
Мазут Береговой ©   (2004-07-01 01:56) [12]

Можете посмотреть здесь пример мой:
http://www.moultonordervision.com/test.asp


 
Мазут Береговой ©   (2004-07-01 01:58) [13]


> iZEN ©   (01.07.04 01:53) [11]

Не стоит наверное, коли далеко спрятал..


 
Мазут Береговой ©   (2004-07-01 02:26) [14]

Вот нашел tree view на Javascript:
http://prdownloads.sourceforge.net/nanotree/nanotree.zip?use_mirror=voxel
Щас буду "выпендриваться"... :-))


 
iZEN ©   (2004-07-01 02:40) [15]

to Мазут Береговой ©   (01.07.04 02:26) [14].
А что за проекты (Ваш и тот, который на sourceforge.net), если не секрет?


 
Мазут Береговой ©   (2004-07-01 03:02) [16]


> iZEN ©   (01.07.04 02:40) [15]

Да мне надо report сделать - одна WEB-page визуализацию сборочных едениц...



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.04 c
3-1087819018
Fishka
2004-06-21 15:56
2004.07.18
MS SQL и mySQL - глюки


14-1088153833
Fikus
2004-06-25 12:57
2004.07.18
Вопрос по Photoshop


1-1089106905
YA
2004-07-06 13:41
2004.07.18
траблы с библиотекой


14-1088267506
andreytha@nm.ru
2004-06-26 20:31
2004.07.18
Как стать сертифицированым специалистом за 5 минут


6-1085394114
ilnarab
2004-05-24 14:21
2004.07.18
Копирование файлов