The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Смещение контура матрицы. Алгоритм  (развлекательная задача)"
Отправлено dcc0, 21-Фев-21 16:21 
Доброго!
Смотрел способы транспонирования матриц.
И возникла такая мысль: как минимальными средствами сдвинуть только контур (пусть будет квадтратной) матрицы. Например,  на  1 позицию, или последовательно на несколько позиций (в цикле).
Конутром матрицы считается:

1) Верхняя строка
2) Правый столбец  
3) Нижняя строка
4) Левый столбец
Относительно пользователя, глядящего в экран :)

Пока получился такой алгоритм: сохранить контур в отельном массиве - contour.
1) Циклически сдвинуть на 1 позицию  массив contour.
2) Переписать строки и столбцы в матрице.

Для матрицы размером 3*3, получается так:


<?php

        /*Циклическое смещение контура на единицу*/    
        
        
        /*Матрица*/            
        $matrix[0]=array( 1,1,1);
        $matrix[1]=array( 2,2,2);
        $matrix[2]=array( 3,3,3);
    
        /*Контур  матрицы */
        $contour=array(1,1,1,2,3,3,3,2);
    
    
    for ($j=0; $j < 8; $j++)
    
    
    {        
            
        /*Сдвигаем массив*/    
        $temp=array_pop($contour);
        array_unshift($contour, $temp);
        
        /*Смещение верхней и правой границы*/
        foreach ($matrix[0] as $k => $value)
        {
        $matrix[0][$k]=$contour[$k];    
        $matrix[$k][2]=$contour[$k+2];
        }
        
        /*Смещение нижней границы*/
        $x=3;
        for ($i=0; $i < 3; $i++)
        $matrix[2][--$x]=$contour[$i+4];
        
        /*Смещение левой границы*/
        $x=2;
        for ( $i=0; $i < 1; $i++)                 
        $matrix[--$x][0]=$contour[$i+7];
        
        
        /*Печатаем*/
        print '<br/>';
        print_r($matrix[0]);
        print '<br/>';
        print_r($matrix[1]);
        print '<br/>';
        print_r($matrix[2]);
        print '<br/>';
        print_r($matrix[3]);
        print '<br/>';
        print '<br/>';
        print '<br/>';
}
?>



 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру