Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связность графа 
V
    Опции темы
Elfet
  Дата 10.12.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



У меня есть матрица смежности орграфа. Как определить связанный или нет?  smile 


--------------------
PM MAIL WWW Skype   Вверх
comp
Дата 10.12.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.11.2006

Репутация: 1
Всего: 1



1.обходиш граф.
2.смотриш, все ли вершины помеченны.
PM MAIL   Вверх
Elfet
Дата 10.12.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



smile Я помню был какой то способ с перемножением матриц смежности. Меня он более всего интересует smile


--------------------
PM MAIL WWW Skype   Вверх
maxim1000
Дата 10.12.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



ну тогда можно рассмотреть такую операцию:
берём вектор, в котором будем хранить, до каких вершин уже добрались
под умножением матрицы будем понимать вектор, показывающий до каких вершин можно добраться если иметь возможность делать один шаг по рёбрам (будем считать, что по главной диагонали матрицы стоят 1)
тогда получается, что каждый элемент нового вектора:
Y[n]=OR[i=1..N] ( X[i] and M[n,i] )
эта операция задаёт "умножение" матрицы на вектор - Y=M*X
большинство нужных свойств выводятся из ассоциативности, дистрибутивности и коммутативности операций or/and аналогично операциям +/*

так что берём вектор с одной 1-цей, действуем на него N раз матрицей M и проверяем в нём наличие нулей, если есть - значит, это изолированные вершины (от первой), если нет - весь граф связный

P.S.
подозреваю, можно перевести это всё просто на умножение матриц
потом посмотреть, что это просто возведение в N-ю степень
в том виде, в котором оно представлено выше - количество умножений N
но само по себе возведение в степень можно сделать за log N шагов:
(в качестве иллюстрации)
Код

CMatrix Power(CMatrix m,int degree)
{
    if(degree==1)
        return m;
    CMatrix sqrmatrix=m*m;
    if(degree%2==0)
        return Power(sqrmatrix,degree/2);
    else
        return Power(sqrmatrix,degree/2)*m;
}



--------------------
qqq
PM WWW   Вверх
Elfet
Дата 10.12.2006, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Ок! smile Спасибо! smile  smile 


--------------------
PM MAIL WWW Skype   Вверх
FireSnake
Дата 12.12.2006, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 15.9.2006
Где: Украина, Донецк

Репутация: нет
Всего: 1



Граждане! А вам знакомы такие алгоритмы как обход в ширину и глубину?!! Выкладываю вам текст из Окулова:

3.2.2. Поиск в ширину
Идея метода. Суть (в сжатой формулировке) заключается в том, чтобы рассмотреть все вершины, связанные с текущей. Принцип выбора следующей вершины - выбирается та, которая была раньше рассмотрена. Для реализации данного принципа необходима структура данных “очередь”. 
 
    Пример. Исходный граф на левом рисунке. На правом рисунке рядом с вершинами в скобках указана очередность просмотра вершин графа.

    Приведем процедуру реализации данного метода обхода вершин графа.
    Логика просмотра вершин.
Код

procedure PW(v:integer);
  var    Og:array[1..N] of 0..N;    {очередь}
    yk1,yk2:integer;    {указатели очереди, yk1 - запись; yk2 - чтение}
    j:integer;    
   begin
    FillChar(Og,SizeOf(Og),0);yk1:=0;yk2:=0;{начальная инициализация}
    Inc(yk1);Og[yk1]:=v;Nnew[v]:=false;{в очередь - вершину v}
    while yk2<yk1 do begin    {пока очередь не пуста}
     Inc(yk2);v:=Og[yk2];write(v:3);{“берем” элемент из очереди}
     for j:=1 to N do {просмотр всех вершин, связанных с вершиной v}
       if (A[v,j]<>0) and Nnew[j] then begin{если вершина ранее не просмотрена}
         Inc(yk1);Og[yk1]:=j;Nnew[j]:=false;{заносим ее в очередь}
        end;
    end;
   end;
    


А вот сам алгоритм, который определяет связан граф или нет обходом в ширину:
Код

program Sviaznost_v_shiriny;
const dl=50;
var a:array[1..dl,1..dl]of integer;
    c,b:array[1..dl]of integer;
    i,j,t,v,m,d,n:integer;
procedure SHIRina;
begin
     b[1]:=1;
     c[1]:=1;
     d:=1;
     m:=1;
     while (m<=d)and(d<n) do
     begin
          v:=c[m];
          t:=1;
          while (t<=n)and(d<n)do
          begin
               if(b[t]=0)and(a[v,t]=1)then
               begin
                    inc(d);
                    b[d]:=1;
                    c[d]:=t;
               end;
               inc(t);
          end;
          inc(m);
     end;
end;

begin
     assign(input,'in.txt');
     reset(input);
     fillchar(a,sizeof(a),0);
     fillchar(b,sizeof(b),0);
     fillchar(c,sizeof(c),0);
     readln(n);
     for i:=1 to n do
     begin
          for j:=1 to n do read(a[i,j]);
          readln;
     end;
     SHIRINA;
     for i:=1 to n do write(c[i],' ');
     writeln;
end.


Это сообщение отредактировал(а) maxim1000 - 12.12.2006, 01:12
PM MAIL ICQ   Вверх
Elfet
Дата 12.12.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Построение ПВГ для каждой вершины? smile Вроде с момощью перемножения проще smile


--------------------
PM MAIL WWW Skype   Вверх
XbiT
Дата 12.12.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: 1
Всего: 1



Не проще это точно. dfs легче для понимания имхо. рекурсия в пару строчек выходит. Единственное, может умножением быстрее...


PM MAIL   Вверх
esperant0
Дата 12.12.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(XbiT @ 12.12.2006,  22:46)
Не проще это точно. dfs легче для понимания имхо. рекурсия в пару строчек выходит. Единственное, может умножением быстрее...

ДФС, не катит в данном случае.


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


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
comp
Дата 13.12.2006, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.11.2006

Репутация: 1
Всего: 1



Цитата(esperant0 @ 12.12.2006,  22:56)
Самый простой алгоритм - это случайное блуждание по графу. Но он работает хорошо только неа не направленных графах

Ну блин, для орграфов, вообще-то, существует совершенной другой алгоритм для определения компонент сильной связности. И вопрос ветки, совершенно этого не касался. Да, и в глубь, намнооого медленнее, в любом случае, надо идти в ширь!!!
PM MAIL   Вверх
Elfet
Дата 13.12.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Странно, а у меня в ширь сложнее получился чем в глубь smile


--------------------
PM MAIL WWW Skype   Вверх
comp
Дата 13.12.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.11.2006

Репутация: 1
Всего: 1



Хех... не может быть. Если идти в глубь, то теряется много времени при возврате из рекурсии, чего собственно не наблюдается, если идти в ширину.
PM MAIL   Вверх
Elfet
Дата 13.12.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Ну да? В шируну тоже есть возврат из рекурсии  smile  Но это уже оффтоп smile 

А можно ещё про перемножение матриц? N раз перемножить раз. А дальше что?


--------------------
PM MAIL WWW Skype   Вверх
maxim1000
Дата 13.12.2006, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(Elfet @  13.12.2006,  22:09 Найти цитируемый пост)
А можно ещё про перемножение матриц? N раз перемножить раз. А дальше что?

если не ошибаюсь, то вполне достаточно проверить, что в каком-нибудь столбце все элементы- единицы (если граф неориентированный)


--------------------
qqq
PM WWW   Вверх
esperant0
Дата 13.12.2006, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



И все же самый простой алг, это случайный обход


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Elfet
Дата 14.12.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Цитата(maxim1000 @  14.12.2006,  00:23 Найти цитируемый пост)
если не ошибаюсь, то вполне достаточно проверить, что в каком-нибудь столбце все элементы- единицы (если граф неориентированный)

С неор я бы делал через поиск в глубину. А с ор - вроде бы через матрицы быстрее получится. Как для орграфа?


--------------------
PM MAIL WWW Skype   Вверх
maxim1000
Дата 14.12.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



для орграфа, наверное, достаточно проверить i-й столбец и i-ю строку (i - неважно какое)


--------------------
qqq
PM WWW   Вверх
V.A.KeRneL
Дата 14.12.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 1
Всего: 14



Если у Вас ориентированный граф без «петель» (рёбер исходящих и входящих в одну и ту же вершину) и матрица смежности задаётся, например, так: 
Код

require "matrix"
require "mathn"

m = Matrix[[ 0, -1,  1,  0], 
           [ 1,  0, -1, -1], 
           [-1,  1,  0,  0], 
           [ 0,  1,  0,  0]]

, где, 
если m[i, j] ==  0, то ребро, соединяющее вершины i и j, отсутствует, 
если m[i, j] ==  1, то ребро выходит из вершины i в вершину j, 
если m[i, j] == -1, то ребро входит в вершину i из вершины j, 
то можно составить матрицу `a' как произведение `m' и транспонированной `m': 
Код

a = m*m.t  # a = (-1)*m*m

# a == Matrix[[ 2, -1, -1, -1], 
#             [-1,  3, -1,  0], 
#             [-1, -1,  2,  1], 
#             [-1,  0,  1,  1]]

и проверить, что все элементы на гланой диагонали `a' положительны: 
Код

connected = TRUE
for i in 0 ... a.row_size
    if (!(a[i, i] > 0))
        connected = FALSE
        break
    end
end
connected  #=> true



Это сообщение отредактировал(а) V_A_KeRneL - 16.12.2006, 22:23


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
maxim1000
Дата 14.12.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(V_A_KeRneL @  14.12.2006,  15:59 Найти цитируемый пост)
если m[i][j] ==  0, то ребро, соединяющее вершины i и j, отсутствует, 
если m[i][j] ==  1, то ребро выходит из вершины i в вершину j, 
если m[i][j] == -1, то ребро входит в вершину i из вершины j,

а если есть оба ребра?


--------------------
qqq
PM WWW   Вверх
comp
Дата 14.12.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.11.2006

Репутация: 1
Всего: 1



Цитата(Elfet @ 13.12.2006,  23:09)
Ну да? В шируну тоже есть возврат из рекурсии  smile

По-видимому ты слабо себе представляеш всякие волновые алгоритмы...
PM MAIL   Вверх
V.A.KeRneL
Дата 15.12.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 1
Всего: 14



Цитата(maxim1000 @  14.12.2006, 17:33 Найти цитируемый пост)

Цитата(V_A_KeRneL @  14.12.2006,  15:59 Найти цитируемый пост)
если m[i][j] ==  0, то ребро, соединяющее вершины i и j, отсутствует, 
если m[i][j] ==  1, то ребро выходит из вершины i в вершину j, 
если m[i][j] == -1, то ребро входит в вершину i из вершины j,

а если есть оба ребра?


Спасибо за замечание.
Я забыл явно описать, что подобные случаи тоже не рассматриваются.
Мне показалось, что из примера видно, что ячейка таблицы (матрицы) может принимать только 3 значения: -1, 0 и 1.
Поймите меня правильно, я не претендую на универсальность решения. Просто привёл эффективное решение частного случая.

Хотя мне кажется, что ничто не мешает для такого случая ввести дополнительное обозначение, например, 2.
Код

require "matrix"
require "mathn"

m = Matrix[[ 0, -1,  1,  0], 
           [ 1,  0, -1,  2], 
           [-1,  1,  0,  0], 
           [ 0,  2,  0,  0]]


Составим матрицу `a': 
Код

a = m*m.t  # a = (-1)*m*m

# a == Matrix[[ 2, -1, -1, -2], 
#             [-1,  6, -1,  0], 
#             [-1, -1,  2,  2], 
#             [-2,  0,  2,  4]]


А теперь опять-таки проверим, что все элементы на главной диагонали матрицы `a' положительны: 
Код

connected = TRUE
for i in 0 ... a.row_size
    if (!(a[i, i] > 0))
        connected = FALSE
        break
    end
end
connected  #=> true


Главный недостаток такого расширения следующий. Теряется главный смысл описанной операции. А он был таков: после умножения матрицы на транспонированную значения на главной диагонали (m[i, i]) показывают общую степень i-ой вершины графа по входу и по выходу.

З.Ы. Я поправил адресацию к элементу матрицы в своём коде. В Ruby (именно на этом языке у меня приведены фрагменты программы) обращение m[i][j] осуществляется, если `m' -- массив (Array), а для матрицы (Matrix) правильно будет так: m[i, j].


Это сообщение отредактировал(а) V_A_KeRneL - 16.12.2006, 22:29


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
maxim1000
Дата 16.12.2006, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(V_A_KeRneL @  15.12.2006,  22:34 Найти цитируемый пост)
А он был таков: после умножения матрицы на транспонированную значения на главной диагонали (m[i, i]) показывают общую степень i-ой вершины графа по входу и по выходу.

даже если предположить, что не бывает таких рёбер (в принципе, по середине каждого одного ребра из такой пары можно поставить фиктивную вершину, что не изменит связности графа), то всё равно остаются непонятности:

A=m*tr(m)
a[i,i]=sum[n=1..N] m[i,n]*( tr(m) )[n,i]=sum[n=1..N] m[i,n]*m[i,n] >=0
так что не представляю себе такой матрицы, которая дала бы отрицательные числа на диагонали такого произведения (да и нули даст разве что нулевая)

второе соображение:
если граф будет состоять из двух связных компонент, то вершины можно перенумеровать так, что матрица будет блочной, операции транспонирования и умножения не меняют блочности и действуют независимо на каждый блок, так что из связности каждой компоненты будет следовать положительность диагональных элементов внутри блока, а значит, и для всей матрицы, а отсюда уже будет следовать связность всего графа, что не выполняется


--------------------
qqq
PM WWW   Вверх
Elfet
Дата 16.12.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



А вот такая проверка: 
Цитата
sign (E + A + A^2 + ... A^(n-1)) = "матрице связности"

 smile 

Это сообщение отредактировал(а) Elfet - 16.12.2006, 20:09


--------------------
PM MAIL WWW Skype   Вверх
Elfet
Дата 16.12.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Вот что получилось: Graph Simple smile


--------------------
PM MAIL WWW Skype   Вверх
V.A.KeRneL
Дата 16.12.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 1
Всего: 14



Цитата(maxim1000 @  16.12.2006, 01:52 Найти цитируемый пост)

даже если предположить, что не бывает таких рёбер (в принципе, по середине каждого одного ребра из такой пары можно поставить фиктивную вершину, что не изменит связности графа), то всё равно остаются непонятности:

A=m*tr(m)
a[i,i]=sum[n=1..N] m[i,n]*( tr(m) )[n,i]=sum[n=1..N] m[i,n]*m[i,n] >=0
так что не представляю себе такой матрицы, которая дала бы отрицательные числа на диагонали такого произведения (да и нули даст разве что нулевая)


Отрицательных элементов действительно не получится. А нулевые получатся в том случае, если i-ая строка, а, соответственно, и i-ый столбец тоже, исходной матрицы `m' нулевые.

Код

require "matrix"
require "mathn"

m = Matrix[[ 0, -1,  1,  0], 
           [ 1,  0, -1,  0], 
           [-1,  1,  0,  0], 
           [ 0,  0,  0,  0]]


Код

a = m*m.t  # a = (-1)*m*m

# a == Matrix[[ 2, -1, -1,  0], 
#             [-1,  2, -1,  0], 
#             [-1, -1,  2,  0], 
#             [ 0,  0,  0,  0]]


Код

connected = TRUE
for i in 0 ... a.row_size
    if (!(a[i, i] > 0))
        connected = FALSE
        break
    end
end
connected  #=> false


Цитата(maxim1000 @  16.12.2006, 01:52 Найти цитируемый пост)

второе соображение:
если граф будет состоять из двух связных компонент, то вершины можно перенумеровать так, что матрица будет блочной, операции транспонирования и умножения не меняют блочности и действуют независимо на каждый блок, так что из связности каждой компоненты будет следовать положительность диагональных элементов внутри блока, а значит, и для всей матрицы, а отсюда уже будет следовать связность всего графа, что не выполняется


А вот тут Вы, похоже, правы.
Для графа с двумя связными компонентами мы получим блочную матрицу, оба побочных компонента (блока) которой будут нулевыми.
И тут мой алгоритм, действительно, даст неправильный ответ.
Код

require "matrix"
require "mathn"

m = Matrix[[ 0, -1,  0,  0,    0,  0], 
           [ 1,  0, -1,  0,    0,  0], 
           [ 0,  1,  0, -1,    0,  0], 
           [ 0,  0,  1,  0,    0,  0], 
           
           [ 0,  0,  0,  0,    0, -1], 
           [ 0,  0,  0,  0,    1,  0]]

...
Код

# ...
connected  #=> true

Что неверно.

Ну, тогда получается, что я прав во всём кроме привязки данного алгоритма к поставленной задаче! smile
Изначально данный алгоритм предназначался, как я упомянул в предыдущем посте, для определения суммарной степени вершин графа по входу и по выходу.

maxim1000, спаибо за ещё одно ценное замечание.

З.Ы. Elfet, спасибо за готовую прогу!


Это сообщение отредактировал(а) V_A_KeRneL - 16.12.2006, 23:22


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0676 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.