Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
Мазут Береговой ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.037 c
1-1088777751
TohaNik
2004-07-02 18:15
2004.07.18
Хочу сделать чтотото типа панели открытых окон...


14-1088628178
KilkennyCat
2004-07-01 00:42
2004.07.18
Что может оказать влияние на вид деятельности программиста?


4-1086339528
SigalX
2004-06-04 12:58
2004.07.18
Смена активного привода CD


6-1084950938
TransparentGhost
2004-05-19 11:15
2004.07.18
Где находится TRASConn и RASEnumConnectionsA ?


1-1088841156
Maksim
2004-07-03 11:52
2004.07.18
Reg.WriteInteger - какие параметры передавать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский