Структура хранения
Чтобы сохранить график, мы знаем, что на графике есть как узлы, так и края. Для приводимого графика каждый край также имеет значение веса. Существует два основных типа часто используемых структур хранения графиков:
Смежная матрица смежной таблицы
Прилегающая матрица
Мы знаем, что для представления узлов мы можем представлять их с одномерным массивом. Однако для отношений между узлами мы не можем просто представлять их с одномерным массивом. Мы можем представлять их с двумерным массивом, то есть методом представления матрицы.
Мы предполагаем, что A-это двумерный массив, затем элемент AIJ не только отражает взаимосвязь между узлом VI и узлом VJ, но и значение AIJ может представлять размер веса.
Вот пример представления матрицы смежности неистового графика:
Из приведенного выше рисунка мы видим, что матрица смежности неистового графика является симметричной матрицей и должна быть симметричной матрицей. И значение на диагонали от верхнего левого угла до правого нижнего угла составляет нулевое (диагональ указывает на тот же узел)
Какова матрица смежности направленного графика?
Для взвешенных графиков значение AIJ может использоваться для представления размера веса. Вышеуказанные два графика представляют собой графики без веса, поэтому их значения оба 1.
Смежная таблица
Мы знаем, что метод хранения матрицы смежности на графике использует матрицу N*N. Когда эта матрица является плотной матрицей (например, когда график представляет собой полный график), то, конечно, выбирается метод хранения смежности.
Но если эта матрица является редкой матрицей, соседняя структура хранения таблиц является более экономной структурой хранения.
Для неориентированного графика выше мы можем использовать таблицу смежности, чтобы представить ее следующим образом:
Узел, подключенный к каждому узлу, является его соседним узлом.
Сравнение матрицы смежности и таблицы смежности
Когда количество узлов на графике мало, и есть много сторон, эффективность использования матрицы смежности выше.
Когда количество узлов очень большое, а количество краев намного меньше, чем количество краев полного графика одного и того же узла, более эффективно принять структуру хранения таблицы смежности.
Внедрение Java матрицы смежности
Смежный матричный модельный класс
Название класса класса модели смежности матрицы - Amwgraph.java. Он может построить график, представленную матрицей смежности через этот класс, и обеспечивать вставку узлов, вставить ребра и получить первый узел смежности и следующий соседний узел определенного узла.
Импорт java.util.arraylist; import java.util.linkedlist;/** * @description смежный матричный модель класса * @author beanlam * @time 2015.4.17 */public class amwgraph {private arraylist vertexlist; // protement int [] [] radges;//addracent matrix, используемые к приватным рентджестам; Amwgraph (int n) {// инициализировать матрицу, одномерный массив и количество ребра vertexlist = new ArrayList (n); numofedges = 0; } // Получить количество узлов public int getNumOfvertex () {return vertexlist.size (); } // Получить количество краев public int getNumOfedges () {return numOfedges; } // возвращать данные узла I public Object getValueByindex (int i) {return vertexlist.get (i); } // возвращает вес v1, v2 public int getweight (int v1, int v2) {return adges [v1] [v2]; } // Вставить узл public void insertVertex (object vertex) {vertexlist.add (vertexlist.size (), vertex); } // Вставьте узел public void вставка (int v1, int v2, int wews) {edges [v1] [v2] = вес; numofedges ++; } // DELETE NODE Public void deleteedge (int v1, int v2) {edges [v1] [v2] = 0; NumOfedges--; } // Получить индекс первого соседнего узла public int getfirstneighbor (int index) {for (int j = 0; j <vertexlist.size (); j ++) {if (edges [index] [j]> 0) {return j; }} return -1; } // Принесите следующий соседний узел в соответствии с подписанием предыдущего соседнего узла Public int getNextneighbor (int v1, int v2) {for (int j = v2+1; j <vertexlist.size (); j ++) {if (edges [v1] [j]> 0) {return j; }} return -1; }}Тестирование модельного класса матрицы смежности
Далее настройте класс тестовой модели на основе следующего направленного графика
Программа тестирования testamWgraph.java выглядит следующим образом:
/** * @description тестовый класс AMWGraph Class * @author beanlam * @time 2015.4.17 */public class testamwgraph {public static void main (string args []) {int n = 4, e = 4; // представляет количество узлов и число рег соответственно строковые этикетки [] = {v1 "," v1 "," v3 "v1" v1 "v1" v1 "/v1" v1 "v1"/v1 "v1"/v1 "/v1"/v1 "/v1"/v1 "/v1"/v1 ". идентификация AMWGraph Graph = new Amwgraph (n); for (String label: labels) {graph.insertvertex (label); // вставить узел} // вставить четыре ребра graph.insertedge (0, 1, 2); graph.insertedge (0, 2, 5); graph.insertedge (2, 3, 8); graph.insertedge (3, 0, 7); System.out.println («Количество узлов:»+graph.getnumofvertex ()); System.out.println («Количество краев:»+graph.getnumofedges ()); graph.deledeedge (0, 1); // delete <v1, v2> edge System.out.println ("После удаления <V1, V2> Edge ..."); System.out.println («Количество узлов:»+graph.getnumofvertex ()); System.out.println («Количество краев:»+graph.getnumofedges ()); }}Выходные результаты консоли показаны на рисунке ниже:
Суммировать
Выше приведено все содержание этой статьи об описании языка Java структуры хранения и примеров кода смежности. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это.