Как создать двумерный динамический массив в С#?

Вопросы и ответы
Вопрос: Как определить двумерный динамический массив? Я пишу программу алгоритма Dijkstra, я хочу, чтобы каждый узел был подключен к другому узлу, чтобы сохранить его значение в массиве. Фактически, это должен быть динамический двумерный массив. Не указано, какой из узлов подключен к другим узлам. Лучший ответ: Прошло немного времени с тех пор, как я выполнил реализацию

Вопрос:

Как определить двумерный динамический массив? Я пишу программу алгоритма Dijkstra, я хочу, чтобы каждый узел был подключен к другому узлу, чтобы сохранить его значение в массиве. Фактически, это должен быть динамический двумерный массив. Не указано, какой из узлов подключен к другим узлам.

enter image description here

Лучший ответ:

Прошло немного времени с тех пор, как я выполнил реализацию алгоритма Dijkstra Algorithm, но вы можете представить свои данные несколькими способами. Вы можете иметь список списков, например, или массив списков. Затем вы можете обработать индекс массива как метку вершины, а список – список массивов, к которым он подключился.

public class Node { public int Weight { get; set; } public int Connected { get; set; } } // You can use either an array of lists or a list of lists List<List<Node>> graph = new List<List<Node>>(); // The index is the edge label — e.g. arr[0] is the edge labeled «0» graph[0] = new List<Node>() { new Node() { Weight = 175, Connected = 1 }, new Node() { Weight= 100, Connected = 2 } // Etc… }; graph[1] = new List<Node>() { // Basically, to represent an undirected edge you’re representing two weighted edges // (i.e. a connection from 1 -> 2 and a connection from 2 -> 1) // This also makes directed edges easy to represent new Node() { Weight = 175, Connected = 1 } // Etc… };

Вы также можете, например, иметь список (или набор) вершин и список ребер. (Фактически, в формальном математическом смысле это фактическое определение графа – множество ребер и множество вершин).

Ответ №1

Если вы ищете динамический массив, используйте List <> object. Я жестко закодированные значения, но вы можете использовать метод Add(), когда вам нужен динамический объект

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace ConsoleApplication9 { class Program { static void Main(string[] args) { List<Node> graph = new List<Node>() { new Node() { id = 0, neighbors = new List<KeyValuePair<int,int>>() { new KeyValuePair<int,int>( 1,127), new KeyValuePair<int,int>( 2,100), new KeyValuePair<int,int>( 4,139), new KeyValuePair<int,int>( 6,117), new KeyValuePair<int,int>( 7,156) } }, new Node() { id = 1, neighbors = new List<KeyValuePair<int,int>>() { new KeyValuePair<int,int>( 0,127), new KeyValuePair<int,int>( 2,102), new KeyValuePair<int,int>( 3,108), new KeyValuePair<int,int>( 7,53) } }, new Node() { id = 2, neighbors = new List<KeyValuePair<int,int>>() { new KeyValuePair<int,int>( 0,100), new KeyValuePair<int,int>( 1,102), new KeyValuePair<int,int>( 3,111), new KeyValuePair<int,int>( 4,173), new KeyValuePair<int,int>( 5,175) } }, new Node() { id = 3, neighbors = new List<KeyValuePair<int,int>>() { new KeyValuePair<int,int>( 1,108), new KeyValuePair<int,int>( 2,111) } }, new Node() { id = 4, neighbors = new List<KeyValuePair<int,int>>() { new KeyValuePair<int,int>( 0,139), new KeyValuePair<int,int>( 2,173), new KeyValuePair<int,int>( 6,165) } }, new Node() { id = 5, neighbors = new List<KeyValuePair<int,int>>() { new KeyValuePair<int,int>( 2,175), new KeyValuePair<int,int>( 6,95), new KeyValuePair<int,int>( 7,145) } }, new Node() { id = 6, neighbors = new List<KeyValuePair<int,int>>() { new KeyValuePair<int,int>( 0,117), new KeyValuePair<int,int>( 4,165), new KeyValuePair<int,int>( 5,95) } }, new Node() { id = 7, neighbors = new List<KeyValuePair<int,int>>() { new KeyValuePair<int,int>( 0,156), new KeyValuePair<int,int>( 1,53), new KeyValuePair<int,int>( 5,145) } } }; } } public class Node { public int id { get; set; } public List<KeyValuePair<int, int>> neighbors { get; set; } } } Ответ №2

Вы можете просто использовать [] []:

double[][] x = new double[5][]; x[0] = new double[10]; x[1] = new double[5]; x[2] = new double[3]; x[3] = new double[100]; x[4] = new double[1];

Второй вариант – использовать:

List<List<double>> 2darray = new List<List<double>> (); 2darray[0] = new List<double>(); 2darray[0][0] = 1;

Оцените статью
Добавить комментарий