首页 > 解决方案 > 数组遍历分别得到每条路径的总和

问题描述

我得到了一个二维数组 ([i][j]),其中 i 级数组每个都有特定的 j 个元素。每个元素都包含一个数字。

我画了这样的东西。对不起我的画。

我发现有一个名为 N-ary tree 的图,但上面的似乎不同。我可以知道如何调用上面的图表吗?

如何使用 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

         .
         .
         .

标签: c#algorithmtree

解决方案


这是创建图表的简单方法。我假设您可以在每条路径上向任一方向移动(不仅仅是向下):

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>(); 
    }

}

推荐阅读