Графикон матрице суседности (са примерима кода на Ц ++, Јава и Питхон)

У овом упутству ћете научити шта је матрица суседности. Такође ћете наћи радне примере матрице суседности у Ц, Ц ++, Јава и Питхон.

Матрица суседности је начин представљања графа Г = (В, Е) као матрице логичких вредности.

Приказ матрице суседства

Величина матрице је VxVгде Vје број врхова на графикону, а вредност уноса Aijје 1 или 0, у зависности од тога да ли постоји ивица од врха и до врха ј.

Пример матрице суседства

Слика испод приказује графикон и његову еквивалентну матрицу суседства.

Матрица суседности из графа

У случају неусмерених графова, матрица је симетрична око дијагонале због сваке ивице (i,j), постоји и ивица (j,i).

Прос матрица суседства

Основне операције попут додавања ивице, уклањања ивице и провере да ли постоји ивица од врха и до врха ј изузетно су ефикасне у времену, сталне временске операције.

Ако је граф густ, а број ивица велик, матрица суседности треба да буде први избор. Чак и ако су граф и матрица суседности ретки, можемо га представити помоћу структура података за ретке матрице.

Највећа предност, међутим, долази од употребе матрица. Недавни напредак у хардверу омогућава нам обављање чак и скупих операција матрице на ГПУ-у.

Извођењем операција на суседној матрици можемо добити важан увид у природу графа и однос између његових темена.

Против матрице суседности

VxVУслов простор матрице суседства то сећање свиња чини. Графови у дивљини обично немају превише веза и то је главни разлог зашто су листе суседства бољи избор за већину задатака.

Иако су основне операције једноставне, операције се свиђају inEdgesи outEdgesскупе су када се користи приказ матрице суседства.

Примери за Питхон, Јава и Ц / Ц ++

Ако знате како да креирате дводимензионалне низове, такође знате како да направите матрицу суседства.

Питхон Јава Ц Ц +
 # Adjacency Matrix representation in Python class Graph(object): # Initialize the matrix def __init__(self, size): self.adjMatrix = () for i in range(size): self.adjMatrix.append((0 for i in range(size))) self.size = size # Add edges def add_edge(self, v1, v2): if v1 == v2: print("Same vertex %d and %d" % (v1, v2)) self.adjMatrix(v1)(v2) = 1 self.adjMatrix(v2)(v1) = 1 # Remove edges def remove_edge(self, v1, v2): if self.adjMatrix(v1)(v2) == 0: print("No edge between %d and %d" % (v1, v2)) return self.adjMatrix(v1)(v2) = 0 self.adjMatrix(v2)(v1) = 0 def __len__(self): return self.size # Print the matrix def print_matrix(self): for row in self.adjMatrix: for val in row: print('(:4)'.format(val)), print def main(): g = Graph(5) g.add_edge(0, 1) g.add_edge(0, 2) g.add_edge(1, 2) g.add_edge(2, 0) g.add_edge(2, 3) g.print_matrix() if __name__ == '__main__': main()
 // Adjacency Matrix representation in Java public class Graph ( private boolean adjMatrix()(); private int numVertices; // Initialize the matrix public Graph(int numVertices) ( this.numVertices = numVertices; adjMatrix = new boolean(numVertices)(numVertices); ) // Add edges public void addEdge(int i, int j) ( adjMatrix(i)(j) = true; adjMatrix(j)(i) = true; ) // Remove edges public void removeEdge(int i, int j) ( adjMatrix(i)(j) = false; adjMatrix(j)(i) = false; ) // Print the matrix public String toString() ( StringBuilder s = new StringBuilder(); for (int i = 0; i < numVertices; i++) ( s.append(i + ": "); for (boolean j : adjMatrix(i)) ( s.append((j ? 1 : 0) + " "); ) s.append(""); ) return s.toString(); ) public static void main(String args()) ( Graph g = new Graph(4); g.addEdge(0, 1); g.addEdge(0, 2); g.addEdge(1, 2); g.addEdge(2, 0); g.addEdge(2, 3); System.out.print(g.toString()); ) )
 // Adjacency Matrix representation in C #include #define V 4 // Initialize the matrix to zero void init(int arr()(V)) ( int i, j; for (i = 0; i < V; i++) for (j = 0; j < V; j++) arr(i)(j) = 0; ) // Add edges void addEdge(int arr()(V), int i, int j) ( arr(i)(j) = 1; arr(j)(i) = 1; ) // Print the matrix void printAdjMatrix(int arr()(V)) ( int i, j; for (i = 0; i < V; i++) ( printf("%d: ", i); for (j = 0; j < V; j++) ( printf("%d ", arr(i)(j)); ) printf(""); ) ) int main() ( int adjMatrix(V)(V); init(adjMatrix); addEdge(adjMatrix, 0, 1); addEdge(adjMatrix, 0, 2); addEdge(adjMatrix, 1, 2); addEdge(adjMatrix, 2, 0); addEdge(adjMatrix, 2, 3); printAdjMatrix(adjMatrix); return 0; )
 // Adjacency Matrix representation in C++ #include using namespace std; class Graph ( private: bool** adjMatrix; int numVertices; public: // Initialize the matrix to zero Graph(int numVertices) ( this->numVertices = numVertices; adjMatrix = new bool*(numVertices); for (int i = 0; i < numVertices; i++) ( adjMatrix(i) = new bool(numVertices); for (int j = 0; j < numVertices; j++) adjMatrix(i)(j) = false; ) ) // Add edges void addEdge(int i, int j) ( adjMatrix(i)(j) = true; adjMatrix(j)(i) = true; ) // Remove edges void removeEdge(int i, int j) ( adjMatrix(i)(j) = false; adjMatrix(j)(i) = false; ) // Print the martix void toString() ( for (int i = 0; i < numVertices; i++) ( cout << i << " : "; for (int j = 0; j < numVertices; j++) cout << adjMatrix(i)(j) << " "; cout << ""; ) ) ~Graph() ( for (int i = 0; i < numVertices; i++) delete() adjMatrix(i); delete() adjMatrix; ) ); int main() ( Graph g(4); g.addEdge(0, 1); g.addEdge(0, 2); g.addEdge(1, 2); g.addEdge(2, 0); g.addEdge(2, 3); g.toString(); )

Примене матрице суседства

  1. Креирање табеле усмеравања у мрежама
  2. Навигацијски задаци

Занимљиви Чланци...