Rumah >Java >javaTutorial >Bagaimana untuk melaksanakan algoritma laluan terpendek graf menggunakan java
Bagaimana untuk melaksanakan algoritma laluan terpendek graf menggunakan Java?
Tajuk: Gunakan algoritma Dijkstra untuk menyelesaikan masalah laluan terpendek bagi graf
Pengenalan:
Graf ialah struktur data penting dalam matematik diskret dan digunakan secara meluas dalam bidang sains maklumat dan sains komputer. Algoritma laluan terpendek untuk graf ialah salah satu teknologi utama untuk menyelesaikan banyak masalah praktikal, seperti penghalaan rangkaian, perancangan bandar, dsb. Artikel ini akan memperkenalkan cara menggunakan bahasa pengaturcaraan Java untuk melaksanakan algoritma Dijkstra yang terkenal untuk menyelesaikan masalah laluan terpendek graf.
1. Prinsip Algoritma:
Algoritma Dijkstra ialah algoritma tamak yang digunakan untuk mencari laluan terpendek dari titik permulaan ke bucu lain dalam graf berwajaran. Idea asas adalah untuk bermula dari titik permulaan, pilih bucu laluan terpendek semasa setiap kali, dan kemas kini laluan terpendek bagi bucu bersebelahannya. Proses ini diulang sehingga bucu sasaran dicapai, atau semua bucu telah dilawati.
2. Langkah-langkah algoritma:
Ulang langkah 3 sehingga bucu sasaran dilawati atau semua bucu telah dilawati
import java.util.*; public class Dijkstra { private static final int INF = Integer.MAX_VALUE; // 定义无穷大 public static void dijkstra(int[][] graph, int start) { int numVertices = graph[0].length; int[] dist = new int[numVertices]; // 存储最短路径的数组 boolean[] visited = new boolean[numVertices]; // 记录顶点是否访问过 for (int i = 0; i < numVertices; i++) { dist[i] = INF; // 初始化距离数组为无穷大 visited[i] = false; // 初始化访问数组为false } dist[start] = 0; // 起点到自身的距离为0 for (int count = 0; count < numVertices - 1; count++) { int u = getMinDistVertex(dist, visited); // 选择当前最短路径的顶点 visited[u] = true; // 标记该顶点已访问 for (int v = 0; v < numVertices; v++) { if (!visited[v] && graph[u][v] != 0 && dist[u] + graph[u][v] < dist[v]) { dist[v] = dist[u] + graph[u][v]; // 更新最短路径 } } } printSolution(dist); // 打印最短路径 } private static int getMinDistVertex(int[] dist, boolean[] visited) { int minDist = INF; int minDistVertex = -1; int numVertices = dist.length; for (int v = 0; v < numVertices; v++) { if (!visited[v] && dist[v] <= minDist) { minDist = dist[v]; minDistVertex = v; } } return minDistVertex; } private static void printSolution(int[] dist) { int numVertices = dist.length; System.out.println("Vertex Distance from Start"); for (int i = 0; i < numVertices; i++) { System.out.println(i + " " + dist[i]); } } public static void main(String[] args) { int[][] graph = { {0, 4, 0, 0, 0, 0, 0, 8, 0}, {4, 0, 8, 0, 0, 0, 0, 11, 0}, {0, 8, 0, 7, 0, 4, 0, 0, 2}, {0, 0, 7, 0, 9, 14, 0, 0, 0}, {0, 0, 0, 9, 0, 10, 0, 0, 0}, {0, 0, 4, 0, 10, 0, 2, 0, 0}, {0, 0, 0, 14, 0, 2, 0, 1, 6}, {8, 11, 0, 0, 0, 0, 1, 0, 7}, {0, 0, 2, 0, 0, 0, 6, 7, 0} }; dijkstra(graph, 0); } }
Artikel ini memperkenalkan cara menggunakan bahasa Java untuk melaksanakan algoritma Dijkstra untuk menyelesaikan masalah laluan terpendek bagi graf. Algoritma ini boleh mencari laluan terpendek dari titik permulaan ke bucu lain dalam graf terarah atau tidak terarah, dan mencapai penyelesaian yang cekap dengan mengemas kini tatasusunan laluan terpendek. Pembaca boleh meneroka dan memperoleh pemahaman yang lebih mendalam tentang algoritma laluan terpendek untuk graf berdasarkan kod sampel dalam artikel ini.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma laluan terpendek graf menggunakan java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!