Обход массива для получения суммы каждого пути соответственно - PullRequest
0 голосов
/ 25 мая 2020

У меня есть двумерный массив ([i] [j]), где i уровней массива с определенными j элементами каждый. Каждый элемент содержит номер.

Я нарисовал что-то вроде этого. Простите за рисунок.

Я обнаружил, что существует диаграмма под названием N-арное дерево, но приведенная выше кажется другой. Могу ли я узнать, как вызвать приведенную выше диаграмму?

Как вывести сумму каждого пути, используя C#? Моя идея примерно такая:

    i=0, j=0
    +i=1, j=0
    +i=2, j=0
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

    i=0, j=0
    +i=1, j=0
    +i=2, j=1
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

    i=0, j=0
    +i=1, j=0
    +i=2, j=2
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

    i=0, j=0
    +i=1, j=0
    +i=2, j=3
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

    i=0, j=0
    +i=1, j=0
    +i=2, j=4
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

    i=0, j=0
    +i=1, j=1
    +i=2, j=0
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

    i=0, j=0
    +i=1, j=1
    +i=2, j=1
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

    i=0, j=0
    +i=1, j=1
    +i=2, j=2
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

    i=0, j=0
    +i=1, j=1
    +i=2, j=3
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

    i=0, j=0
    +i=1, j=1
    +i=2, j=4
    +i=3, j=0
    +i=3, j=1
    +i=3, j=2
    +i=3, j=3

         .
         .
         .

1 Ответ

0 голосов
/ 25 мая 2020

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<List<Node>> nodes = new List<List<Node>>();
            for (int i = 0; i < 4; i++)
            {
                int j = 0;
                switch (i)
                {
                    case 0 :
                        j = 5;
                        break;
                    case 1:
                        j = 7;
                        break;
                    case 2:
                        j = 6;
                        break;
                    case 3:
                        j = 4;
                        break;
                }
                List<Node> row = new List<Node>();
                nodes.Add(row);
                for (int col = 0; col < j; col++)
                {
                    Node newNode = new Node();
                    newNode.i = i;
                    newNode.j = j;
                    row.Add(newNode);
                }
            }
            //add neighbors
            for (int i = 0; i < nodes.Count() - 1; i++)  // do not need to add neighbors to last row
            {
                for (int j = 0; j < nodes[i].Count(); j++)
                {
                    for (int k = 0; k < nodes[i + 1].Count(); k++)
                    {
                        Node currentNode = nodes[i][j];
                        Node neighbor = nodes[i + 1][k];
                        currentNode.neighbors.Add(neighbor);
                        neighbor.neighbors.Add(currentNode);
                    }
                }
            }
        }
    }
    public class Node
    {
        public int i { get; set; }
        public int j { get; set; }
        public int value { get; set; }
        public List<Node> neighbors = new List<Node>(); 
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...