Обход диагоналей матрицы
    , Как пройти каждую диагональ матрицы?
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    правила раздела Алгоритмы
  
    Обход диагоналей матрицы
    , Как пройти каждую диагональ матрицы?
  | 
         
         
         
          
           Сообщ.
           #1
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Здравствуйте. 
        
      Возник простейший вопрос обхода матрицы по диагоналям. То есть, нужно пройти каждую диагональ по отдельности и, допустим, осуществить в оных поиск какого-нибудь элемента с определенным значением или, например, суммирование элементов диагонали. Спасибо.  | 
    
| 
         
         
         
          
           Сообщ.
           #2
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Заводишь цикл по i и элемент главной диагонали будет иметь координаты a[i,i], 
        
      а элемент побочной диагонали соответственно a[i,m-i], где m - это размерность матрицы.  | 
    
| 
         
         
         
          
           Сообщ.
           #3
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Что приходит на ум... 
        
      a - матрица, индексация: [строка от 0,столбец от 0] m - число строк n - число столбцов ![]() ![]() /* Диагонали, параллельные главной */ for dx in 0..n-1 // каждая диагональ (1 из 2) {  y = 0  for x in dx..n-1  {   break when y>=m   обрабатываем элемент a[x,y]   y++  } } for dy in 1..m-1 // каждая диагональ (2 из 2) (от 1, чтобы не повторяться насчёт главной диагонали) {  x = 0  for y in dy..m-1   {   break when x>=n   обрабатываем элемент a[x,y]   x++  } } /* Диагонали, перпендикулярные главной */ for dx in 0..n-1 // каждая диагональ (1 из 2) {  y = 0  for x in n-1..dx  {   break when y>=m   обрабатываем элемент a[x,y]   y++  } } for dy in 1..m-1 // каждая диагональ (2 из 2) (от 1, чтобы не повторяться насчёт главной диагонали) {  x = 0  for y in m-1..dy  {   break when x>=n   обрабатываем элемент a[x,y]   x++  } } Чё-то много получилось!   На всякий случай писал не для квадратных матриц, хотя не уверен, что термин "диагональ" для них применим.  | 
    
| 
         
         
         
          
           Сообщ.
           #4
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата  На всякий случай писал не для квадратных матриц Любую матрицу можно привести к квадратной, дополнив недостающие столбцы/строки нулями.  | 
    
| 
         
         
         
          
           Сообщ.
           #5
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          PAVНу действительные числа тоже частный случай комплексных, но это не значит, что квадратный корень можно извлечь из любого действительного числа  
        
        Т.е., что любая матрица приводится ко квадратной, это здорово, но в моём понимании диагональ всегда ассоциировалась лишь как a[i,i] и a[i,m-i], то бишь существующее только для квадратных, опять же, матриц, но чем дальше в лес, тем больше вижу, что диагональ - для матриц - имеет более общий смысл....   |