日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

《漫画算法2》源码整理-2 图算法

發(fā)布時(shí)間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《漫画算法2》源码整理-2 图算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GraphUtil

import java.util.LinkedList;public class GraphUtil {//深度優(yōu)先遍歷public static void dfs(Graph graph, int start, boolean[] visited) {System.out.println(graph.vertexes[start].data);visited[start] = true;for (int index : graph.adj[start]) {if (!visited[index]) {dfs(graph, index, visited);}}}//廣度優(yōu)先遍歷public static void bfs(Graph graph, int start, boolean[] visited, LinkedList<Integer> queue) {queue.offer(start);while (!queue.isEmpty()) {int front = queue.poll();if (visited[front]) {continue;}System.out.println(graph.vertexes[front].data);visited[front] = true;for (int index : graph.adj[front]) {queue.offer(index);;}}}//圖的頂點(diǎn)private static class Vertex {int data;Vertex(int data) {this.data = data;}}//圖(鄰接表形式)private static class Graph {private int size;private Vertex[] vertexes;private LinkedList<Integer>[] adj;Graph(int size) {this.size = size;//初始化頂點(diǎn)和鄰接矩陣vertexes = new Vertex[size];adj = new LinkedList[size];for (int i = 0; i < size; i++) {vertexes[i] = new Vertex(i);adj[i] = new LinkedList();}}}public static void main(String[] args) {Graph graph = new Graph(6);graph.adj[0].add(1);graph.adj[0].add(2);graph.adj[0].add(3);graph.adj[1].add(0);graph.adj[1].add(3);graph.adj[1].add(4);graph.adj[2].add(0);graph.adj[3].add(0);graph.adj[3].add(1);graph.adj[3].add(4);graph.adj[3].add(5);graph.adj[4].add(1);graph.adj[4].add(3);graph.adj[4].add(5);graph.adj[5].add(3);graph.adj[5].add(4);System.out.println("圖的深度優(yōu)先遍歷:");dfs(graph, 0, new boolean[graph.size]);System.out.println("圖的廣度優(yōu)先遍歷:");bfs(graph, 0, new boolean[graph.size], new LinkedList<Integer>());} }


單源最短路徑算法 Dijkstra 算法

import java.util.*;public class Dijkstra {// Dijkstra最短路徑算法public static int[] dijkstra(Graph graph, int startIndex) {//圖的頂點(diǎn)數(shù)量int size = graph.vertexes.length;//創(chuàng)建距離表,存儲(chǔ)從起點(diǎn)到每一個(gè)頂點(diǎn)的臨時(shí)距離int[] distances = new int[size];//記錄頂點(diǎn)遍歷狀態(tài)boolean[] access = new boolean[size];//初始化最短路徑表,到達(dá)每個(gè)頂點(diǎn)的路徑代價(jià)默認(rèn)為無(wú)窮大for (int i = 1; i < size; i++) {distances[i] = Integer.MAX_VALUE;}//遍歷起點(diǎn),刷新距離表access[0] = true;List<Edge> edgesFromStart = graph.adj[startIndex];for (Edge edge : edgesFromStart) {distances[edge.index] = edge.weight;}//主循環(huán),重復(fù)遍歷最短距離頂點(diǎn)和刷新距離表的操作for (int i = 1; i < size; i++) {//尋找最短距離頂點(diǎn)int minDistanceFromStart = Integer.MAX_VALUE;int minDistanceIndex = -1;for (int j = 1; j < size; j++) {if (!access[j] && (distances[j] < minDistanceFromStart)) {minDistanceFromStart = distances[j];minDistanceIndex = j;}}if (minDistanceIndex == -1) {break;}//遍歷頂點(diǎn),刷新距離表access[minDistanceIndex] = true;for (Edge edge : graph.adj[minDistanceIndex]) {if (access[edge.index]) {continue;}int weight = edge.weight;int preDistance = distances[edge.index];if ((weight != Integer.MAX_VALUE) &&((minDistanceFromStart + weight) < preDistance)) {distances[edge.index] = minDistanceFromStart + weight;}}}return distances;}// Dijkstra最短路徑算法(返回完整路徑)public static int[] dijkstraV2(Graph graph, int startIndex) {//圖的頂點(diǎn)數(shù)量int size = graph.vertexes.length;//創(chuàng)建距離表,存儲(chǔ)從起點(diǎn)到每一個(gè)頂點(diǎn)的臨時(shí)距離int[] distances = new int[size];//創(chuàng)建前置定點(diǎn)表,存儲(chǔ)從起點(diǎn)到每一個(gè)頂點(diǎn)的已知最短路徑的前置節(jié)點(diǎn)int[] prevs = new int[size];//記錄頂點(diǎn)遍歷狀態(tài)boolean[] access = new boolean[size];//初始化最短路徑表,到達(dá)每個(gè)頂點(diǎn)的路徑代價(jià)默認(rèn)為無(wú)窮大for (int i = 0; i < size; i++) {distances[i] = Integer.MAX_VALUE;}//遍歷起點(diǎn),刷新距離表access[0] = true;List<Edge> edgesFromStart = graph.adj[startIndex];for (Edge edge : edgesFromStart) {distances[edge.index] = edge.weight;prevs[edge.index] = 0;}//主循環(huán),重復(fù) 遍歷最短距離頂點(diǎn)和刷新距離表 的操作for (int i = 1; i < size; i++) {//尋找最短距離頂點(diǎn)int minDistanceFromStart = Integer.MAX_VALUE;int minDistanceIndex = -1;for (int j = 1; j < size; j++) {if (!access[j] && (distances[j] < minDistanceFromStart)) {minDistanceFromStart = distances[j];minDistanceIndex = j;}}if (minDistanceIndex == -1) {break;}//遍歷頂點(diǎn),刷新距離表access[minDistanceIndex] = true;for (Edge edge : graph.adj[minDistanceIndex]) {if (access[edge.index]) {continue;}int weight = edge.weight;int preDistance = distances[edge.index];if ((weight != Integer.MAX_VALUE) &&((minDistanceFromStart + weight) < preDistance)) {distances[edge.index] = minDistanceFromStart + weight;prevs[edge.index] = minDistanceIndex;}}}return prevs;}private static void printPrevs(Vertex[] vertexes, int[] prev, int i) {if (i > 0) {printPrevs(vertexes, prev, prev[i]);}System.out.println(vertexes[i].data);}private static void initGraph(Graph graph) {graph.vertexes[0] = new Vertex("A");graph.vertexes[1] = new Vertex("B");graph.vertexes[2] = new Vertex("C");graph.vertexes[3] = new Vertex("D");graph.vertexes[4] = new Vertex("E");graph.vertexes[5] = new Vertex("F");graph.vertexes[6] = new Vertex("G");graph.adj[0].add(new Edge(1, 5));graph.adj[0].add(new Edge(2, 2));graph.adj[1].add(new Edge(0, 5));graph.adj[1].add(new Edge(3, 1));graph.adj[1].add(new Edge(4, 6));graph.adj[2].add(new Edge(0, 2));graph.adj[2].add(new Edge(3, 6));graph.adj[2].add(new Edge(5, 8));graph.adj[3].add(new Edge(1, 1));graph.adj[3].add(new Edge(2, 6));graph.adj[3].add(new Edge(4, 1));graph.adj[3].add(new Edge(5, 2));graph.adj[4].add(new Edge(1, 6));graph.adj[4].add(new Edge(3, 1));graph.adj[4].add(new Edge(6, 7));graph.adj[5].add(new Edge(2, 8));graph.adj[5].add(new Edge(3, 2));graph.adj[5].add(new Edge(6, 3));graph.adj[6].add(new Edge(4, 7));graph.adj[6].add(new Edge(5, 3));}//圖的頂點(diǎn)private static class Vertex {String data;Vertex(String data) {this.data = data;}}//圖的邊private static class Edge {int index;int weight;Edge(int index, int weight) {this.index = index;this.weight = weight;}}// 圖private static class Graph {private Vertex[] vertexes;private LinkedList<Edge>[] adj;Graph(int size) {//初始化頂點(diǎn)和鄰接矩陣vertexes = new Vertex[size];adj = new LinkedList[size];for (int i = 0; i < adj.length; i++) {adj[i] = new LinkedList<Edge>();}}}public static void main(String[] args) {Graph graph = new Graph(7);initGraph(graph);int[] distances = dijkstra(graph, 0);System.out.println(distances[6]);System.out.println("輸出完整路徑:");int[] prevs = dijkstraV2(graph, 0);printPrevs(graph.vertexes, prevs, graph.vertexes.length- 1);}}


多源最短路徑算法 Floyd 算法

public class Floyd {final static int INF = Integer.MAX_VALUE;public static void floyd(int[][] matrix) {//循環(huán)更新矩陣的值for (int k = 0; k < matrix.length; k++) {for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix.length; j++) {if ((matrix[i][k] == INF) || (matrix[k][j] == INF)) {continue;}matrix[i][j] = Math.min(matrix[i][j], matrix[i][k] + matrix[k][j]);}}}// 打印floyd最短路徑的結(jié)果System.out.printf("最短路徑矩陣: \n");for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix.length; j++) {System.out.printf("%3d ", matrix[i][j]);}System.out.printf("\n");}}public static void main(String[] args) {int[][] matrix = {{ 0, 5, 2, INF, INF, INF, INF },{ 5, 0, INF, 1, 6, INF, INF },{ 2, INF, 0, 6, INF, 8, INF },{ INF, 1, 6, 0, 1, 2, INF },{ INF, 6, INF, 1, 0, INF, 7 },{ INF, INF, 8, 2, INF, 0, 3 },{ INF, INF, INF, INF, 7, 3, 0 }};floyd(matrix);} }

總結(jié)

以上是生活随笔為你收集整理的《漫画算法2》源码整理-2 图算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷激情社区 | 26uuu国产精品视频 | 国产在线a| 日韩黄色三级视频 | 麻豆91av| 新91视频在线观看 | 久久澡 | 国产视频在线观看视频 | 婷婷狠狠爱| 久久亚洲精品无码va白人极品 | 精品视频91| 女性裸体视频网站 | 久久久久久久久久久网站 | 加勒比一区二区三区 | 中文字幕视频网 | 放荡的少妇2欧美版 | av日韩精品 | 午夜精品区 | 三浦惠理子aⅴ一二三区 | 人人爽爽爽| 手机看片福利一区 | 日本特级淫片 | 亚洲精品人妻av | 精品视频一区在线观看 | 杨幂一区二区三区免费看视频 | 深夜精品 | mm131美女视频 | 韩国裸体网站 | 让人下面流水的视频 | 动漫av在线免费观看 | 四虎影视免费观看 | 91爱爱爱 | 人妻无码久久精品人妻 | 求个黄色网址 | 日韩免费观看一区二区 | 激情黄色小说视频 | 第一av在线 | 男女性杂交内射妇女bbwxz | 国产精品久久久99 | 污视频网站免费在线观看 | 精品久久人人 | 青青草原av在线 | 亚洲国产成人在线 | 99热这里只有精品8 国产一卡二 | 光棍影院手机版在线观看免费 | 亚洲午夜久久 | 成人免费网站 | 欧美性受xxxxx | 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 久久影视av | 永久免费看黄 | 日韩一二三区在线观看 | 亚洲污视频| 汗汗视频 | 1024欧美| 日韩欧美卡一卡二 | 性五月天| 美女扣逼喷水视频 | 亲子乱对白乱都乱了 | 日韩免费片 | 亚洲精品免费观看 | 蜜桃精品视频在线观看 | 自拍偷拍视频在线观看 | 男女黄床上色视频免费的软件 | 欧美偷拍少妇精品一区 | 国产日产精品一区二区三区四区 | 黄色高清视频 | 国产精品2018 | 国产精品无码中文 | 小sao货水好多真紧h无码视频 | av天天堂| 黄色成人在线播放 | 中文字幕+乱码+中文乱 | 午夜影院福利社 | 日韩在线视频免费看 | 一级特黄aa | 久久精品女人毛片国产 | 色综合一区二区三区 | 日韩久久久 | 黑人糟蹋人妻hd中文字幕 | 国产情侣在线播放 | 久久久久久久9 | 美女脱光内衣内裤 | 日日麻批免费视频播放 | 伊人久久久久噜噜噜亚洲熟女综合 | 在线一区二区三区四区五区 | 18成人免费观看网站下载 | 欧美成人h版在线观看 | 精品国产乱码一区二 | 国精产品乱码一区一区三区四区 | 亚洲2022国产成人精品无码区 | 91精品区 | 超碰99热 | 免费看的黄色录像 | 日韩成人免费在线 | 一级黄色影院 | 91麻豆精品国产理伦片在线观看 | 国产成人精品123区免费视频 | 色哟哟网站 |