Re: Алгоритм

From
Pavel P ()
To
Alexey Desyatnik
Date
2002-10-09T08:56:46Z
Area
RU.ALGORITHMS
From: "Pavel P" <vprin@indiainfo.com>


"Alexey Desyatnik" <desyatnik@dax.ru> wrote in message
news:3DA2F19C.7060008@dax.ru...
> Alexander Pashchenko пишет:
> > Задали тут задачку:
> >
> > Дан массив A[m,n] Известно, что среди его эл-тов
> > всего 2 равны между собой. Напечатать их индесксы.
> >
> > Как ее правильно решить.
> >
> > Я так думаю, что надо проходить по матрице и сравнивать текущий элемент
с
> > запомненным, исключая сам запомненный. И если они равны вывести индексы.
> > Но вот тут-то я и запутался.
>
> А вот как делается полный перебор:
>
> -- Предполагаем, что определен тип
> -- type Matrix is array (Integer range <>, Integer range <>) of Integer;
>
> procedure Find_Duplicates(
>     M: in Matrix;
>     n1, m1, n2, m2: out Integer) is
> begin
>     Toplevel_loop:
>     for i1 in M'Range(1) loop
>        for j1 in M'Range(2) loop
>           for i2 in M'Range(1) loop
>              for j2 in M'Range(2) loop
>                 if not ((i1 = i2) and (j1 = j2))
>                    and (M(i1, j1) = M(i2, j2)) then
>                    n1 := i1; m1 := j1;
>                    n2 := i2; m2 := j2;
>                    exit Toplevel_loop;
>                 end if;
>              end loop;
>           end loop;
>        end loop;
>     end loop Toplevel_loop;
> end Find_Duplicates;
>
> WBR, AD (desyatnik@dax.ru)
>
> P.S. Наверняка язык незнаком... :) Это чтоб было не слишком просто.

Язык програмирования Ада. Не зря так назван :)))
Проще надо быть ... проще ... :)
//--- CUT -------------------------------------------------
find_Duplicates arr  =  find_item_y 0 arr ((limit o sort o flatten) arr)
where
    find_item_y _ []    _   = []
    find_item_y y [h:t] z   = find_item_x y 0 h z ++ find_item_y (y + 1) t z

    find_item_x _ _ []    _ = []
    find_item_x y x [h:t] z = (if (h == z) [(x,y)] []) ++ find_item_x y (x +
1) t z


Start = find_Duplicates arr
where
    arr = [[1,  2,  3,  4], [5,  6,  7,  8], [11, 10, 9, 11]]

//--- CUT -------------------------------------------------
> Ну, думаю, разберешься.
работает с произвольными матрицами (не обязательно даже m*n)
и произвольными типами данных :)))

B.R.
Pavel



--- ifmail v.2.15dev5
 * Origin: Demos online service (2:5020/400)