Введение в неопределенные графики смежных таблиц
Недопроизводимый график таблицы смежности относится к неистовому графику, представленному таблицей смежности.
Вышеупомянутый рисунок G1 содержит 7 вершин «A, B, C, D, E, F, G», и содержит 7 ребра «(A, C), (A, D), (A, F), (B, C), (C, D), (E, G), (F, G)».
Матрица справа от рисунка выше представляет собой смежность G1 в памяти, указывающая на намерение. Каждая вершина содержит связанный список, который записывает «номер последовательности соседних точек вершины». Например, данные узлов, содержащихся в связанном списке, содержащемся во второй вершине (вершина C), соответственно «0, 1, 3»; И эти «0, 1, 3» соответствуют номеру последовательностей «A, B, D» и «A, B, D» - все соседние точки C. Это как записать информацию изображения.
Описание кода неисправного графика таблицы смежности
1. Основное определение
Общедоступный класс Listudg {// вершина, которая дополняет таблицу, соответствующую связанному списку частного класса enode {int ivex; // Положение вершины, которое указывает на enode nextge; // указатель на следующую дугу} // вершина, которая прилагает таблицу в таблице Private Vnode {char; // vertex information indode, что на подключаемое racte ructer; Vertex}; private vnode [] mvexs; // вершина массив ...}(01) Listudg - это структура, соответствующая таблице смежности. MVEXS-это одномерный массив, который хранит информацию вершины.
(02) VNODE - это структура, соответствующая вершинам соседней таблицы. Данные - это данные, содержащиеся в вершине, а первый указатель заголовка связанного списка, содержащегося в вершине.
(03) Enode - это структура, соответствующая узлам, которые прилегают к связанному списку, содержащемуся в вершинах таблицы. IVEX является индексом вершины, соответствующей этому узлу в VEXS, в то время как Nextedge указывает на следующий узел.
2. Создайте матрицу
Вот два метода создания матрицы. Один использует известные данные, а другой требует, чтобы пользователь вводил данные вручную.
2.1 Создайте график (используя предоставленную матрицу)
/ * * Создать график (с использованием предоставленной матрицы) * *. Vnode [vlen]; for (int i = 0; i <mvexs.length; i ++) {mvexs [i] = new vnode (); mvexs [i] .data = vexs [i]; mvexs [i] .firstedgededge = null;} // Инициализируйте «edges» для (int i = 0; окончание вершины края char c1 = ребра [i] [0]; char c2 = рекорды [i] [1]; // Читать исходную вершину и конечную вершину края int p1 = getPosition (edges [i] [0]); int p2 = getPosition (edges [i] [1]); // инициализируйте node1enode node1 = node1 = node1 = node1 = node1 = x = node1; Link Node1 на «конец связанного списка, где находится P1« if (mvexs [p1] .firstedge == null) mvexs [p1] .firstedge = node1; else Linklast (mVexs [p1] .firstedge, node1); // инициализировать Node2enode node2 = new enode (); node2.ivex = p1; // link node2 с «конец связанного списка, где p2» расположен «if (mvexs [p2] .firstedded = null) mVexs [p2]. else Linklast (mvexs [p2] .firstedge, node2);}}Функция состоит в том, чтобы создать неопределенный график таблицы смежности. Фактически, неисправный график, созданный этим методом, представляет собой рисунок G1 выше. Код вызова выглядит следующим образом:
char [] vexs = {'a', 'b', 'c', 'd', 'e', 'f', 'g'}; char [] [] edges = new char [] [] {{'a', 'c'}, {'a', 'd'}, {'a', 'f'}, {'b' ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',' { {'E', 'g'}, {'f', 'g'}}; listudg pg; pg = new listudg (vexs, ряд);2.2 Создайте график (введите себя)
/ * * Создать график (введите данные самостоятельно) */public listudg () {// enter «номер версии» и «ряд края» System.out.printf («Номер ввода вершины:»); int vlen = redhtint (); System.out.printf ("ряд ввода:"); int elen = redhctint (); if (vlen <1 || 1))))) {System.out.printf ("ошибка ввода: неверные параметры!/N"); return;} // инициализировать "версию" mVexs = new vnode [vlen]; для (int i = 0; i <mVexs.length; i ++) {system.out.printf ("vertex (%d):", i); Vnode (); mvexs [i] .data = readchar (); mvexs [i] .firstedge = null;} // инициализировать "Edge" // mmatrix = new int [vlen] [vlen]; для (int i = 0; i <elen; i ++) {// Читать начало и окончание вершины. i); char c1 = readchar (); char c2 = readchar (); int p1 = getPosition (c1); int p2 = getPosition (c2); // инициализировать узлы node1enode1 = new enode (); node1.ivex = p2; // node1 node1 с «конец списка связан mvexs [p1] .firstedge = node1; else Linklast (mVexs [p1] .firstedge, node1); // инициализировать Node2enode node2 = new enode (); node2.ivex = p1; // link node2 с «конец связанного списка, где p2» расположен «if (mvexs [p2] .firstedded = null) mVexs [p2]. else Linklast (mvexs [p2] .firstedge, node2);}}Эта функция считывает вход пользователя и преобразует входные данные в соответствующий неистовый график.
Полный исходный код неисправного графика таблицы смежности
Импорт java.io.ioexception; import java.util.scanner; публичные классы Listudg {// вершина, которая находится рядом с связанным списком, соответствующим таблице в таблице частного класса enode {int avex; // Положение вершины, которое указывает на Enode nextge; // указатель к следующему дугу}// vertex in tablex in tablex in tablex in tablex in tablex in tablex in tablex in tablex in tablex in tablex in tablex in tablex {char Data; // Информация Vertex enode FirstEdge; // Указатель на первую дугу, которая прикреплена к вершине}; private vnode [] mVexs; // вершина массив/ * * Создать график (входные данные самостоятельно) */public listudg () {// Ввод «номер вертекса» и «номер». readint (); System.out.printf ("номер края ввода:"); int elen = rechint (); if (vlen <1 || elen <1 || (elen> (vlen*(vlen - 1))))) {System.out.printf ("Входная ошибка: инвалидные параметры!/n");} // инициализируйте "vertex vertex vertex" wertex vertex vertex =}; Vnode [vlen]; for (int i = 0; i <mvexs.length; i ++) {System.out.printf ("Vertex (%d):", i); mvexs [i] = new vnode (); mvexs [i] .data = readchar (); mvexs [i]. int [vlen] [vlen]; for (int i = 0; i <elen; i ++) {// Читать начальную и конечную вершину системы края. = new enode (); node1.ivex = p2; // link node1 на «конец связанного списка, где находится P1», «if (mvexs [p1] .firstedge == null) mvexs [p1] .firstedgedge = node1; else Linklast (mVexs [p1] .firstedge, node1); // инициализировать Node2enode node2 = new enode (); node2.ivex = p1; // link node2 с «конец связанного списка, где p2» расположен «if (mvexs [p2] .firstedded = null) mVexs [p2]. else linklast (mvexs [p2] .firstedge, node2);}}/ * * Создать график (с использованием предоставленной матрицы) * * * * = edges.length; // инициализировать "Vertex" mVexs = new vnode [vlen]; для (int i = 0; i <mvexs.length; i ++) {mvexs [i] = new vnode (); mvexs [i] .data = vexs [i]; mvexs [i]. 0; node1 = new enode (); node1.ivex = p2; // link node1 к «конец связующего списка, где P1 находится« if (mVexs [p1] .firstedge == null) mvexs [p1] .firstedge = node1; else Linklast (mVexs [p1] .firstedge, node1); // инициализировать Node2enode node2 = new enode (); node2.ivex = p1; // link node2 с «конец связанного списка, где p2» расположен «if (mvexs [p2] .firstedded = null) mVexs [p2]. else linklast (mvexs [p2] .firstedge, node2);}}/** Свяжите узел узела с последним списком*/private void linklast (список enode, enode node) {enode p = node; while (p.nextege! {for (int i = 0; i <mvexs.length; i ++) if (mVexs [i] .data == ch) return i; return -1;}/** Читать входной символ*/private char chidchar () {char ch = '0'; {e.printstackTrace ();}} while (! ((CH> = 'a' && ch <= 'z') || (CH> = 'a' && ch <= 'z'))); return ch;}/** Читать символ*/private int Readint () {scanner scanner = new scanner (system.in); return Scanner.next ();*); график очередей*/public void print () {System.out.printf ("Список граф:/n"); для (int i = 0; i <mVexs.length; i ++) {System.out.printf ("%d (%c):", i, mvexs [i] .data); Enode node = mVexs [i]. while (node != null) {System.out.printf("%d(%c) ", node.ivex, mVexs[node.ivex].data);node = node.nextEdge;}System.out.printf("/n");}}public static void main(String[] args) {char[] vexs = {'A', 'B', 'C', 'D', 'e', 'f', 'g'}; char [] [] edges = new char [] [] {{'a', 'c'}, {'a', 'd'}, {'a', 'f'}, {'b', 'c'}, {'c', '},' ',' '', '', '', '', '', '', '', '', '' ',' ',' ',' ',' ',' ',' ',' '' '' '' '' '' 'G'}}; listudg pg; // custom "Graph" (queue matrix входной матрицы) // pg = new listudg (); // Использование существующего "графика" pg = new listudg (vexs, edges); pg.print (); // print diagram}}}}}}}}}}}}}}}}}}}}Суммировать
Выше приведено все содержание этой статьи о реализации полного исходного кода языка Java of the смежного таблицы. Неправомерный график. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на этот сайт:
Подробное объяснение кода математического выражения Java расчета
Подробное объяснение кода параметра переменной длины в Java
Языковое решение Java для идеального анализа кода числа
Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!