最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java查找圖中兩點之間所有路徑

 更新時間:2019年01月17日 09:31:20   作者:Coder_py  
這篇文章主要為大家詳細介紹了java查找圖中兩點之間所有路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java查找圖中兩點之間所有路徑的具體代碼,基于鄰接表,供大家參考,具體內容如下

圖類:

package graph1;
 
import java.util.LinkedList;
 
import graph.Graph.edgeNode;
 
public class Graph {
 
 class EdgeNode{
  int adjvex;
  EdgeNode nextEdge;
 }
 
 class VexNode{
 int data;
 EdgeNode firstEdge;
 boolean isVisted;
 public boolean isVisted() {
  return isVisted;
 }
 public void setVisted(boolean isVisted) {
  this.isVisted = isVisted;
 }
 
 }
 
 VexNode[] vexsarray ;
 int[] visited = new int[100];
 boolean[] isVisited = new boolean[100];
 
 public void linkLast(EdgeNode target,EdgeNode node) {
 while (target.nextEdge!=null) {
  target=target.nextEdge;
 }
 target.nextEdge=node;
 }
 
 public int getPosition(int data) {
  for(int i=0;i<vexsarray.length;i++) {
  if (data==vexsarray[i].data) {
   return i;
  }
  }
  return -1;
 }
 
 
 public void buildGraph(int[] vexs,int[][] edges ) {
 int vLen = vexs.length;
 int eLen = edges.length;
 vexsarray = new VexNode[vLen];
 
 for(int i=0;i<vLen;i++) {
  vexsarray[i] = new VexNode();
  vexsarray[i].data = vexs[i];
  vexsarray[i].firstEdge = null;
 }
 
 for(int i=0;i<eLen;i++) {
  
  int a = edges[i][0];
  int b = edges[i][1];
  
  int start = getPosition(a);
  int end = getPosition(b);
  
  EdgeNode edgeNode = new EdgeNode();
  edgeNode.adjvex = end;
  
  if (vexsarray[start].firstEdge == null) {
  vexsarray[start].firstEdge = edgeNode;
  } else {
  linkLast(vexsarray[start].firstEdge,edgeNode);
  }
 }
 }
 
 
 public void printGraph() {
 for(int i=0;i<vexsarray.length;i++) {
  System.out.printf("%d--",vexsarray[i].data);
  EdgeNode node = vexsarray[i].firstEdge;
  while (node!=null) {
  System.out.printf("%d(%d)--",node.adjvex,vexsarray[node.adjvex].data);
  node = node.nextEdge;
  }
  System.out.println("\n");
 }
 }

算法:

package graph1;
 
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
 
import javax.swing.plaf.synth.SynthStyle;
 
import graph1.Graph.EdgeNode;
 
public class FindALlPath {
 
 
 //代表某節(jié)點是否在stack中,避免產生回路 
 public Map<Integer,Boolean> states=new HashMap(); 
  
 //存放放入stack中的節(jié)點 
 public Stack<Integer> stack=new Stack(); 
 
 //打印stack中信息,即路徑信息 
 public void printPath(){ 
   StringBuilder sb=new StringBuilder(); 
   for(Integer i :stack){ 
     sb.append(i+"->"); 
   } 
   sb.delete(sb.length()-2,sb.length()); 
   System.out.println(sb.toString()); 
 } 
 
 //得到x的鄰接點為y的后一個鄰接點位置,為-1說明沒有找到 
 public int getNextNode(Graph graph,int x,int y){ 
   int next_node=-1; 
   EdgeNode edge=graph.vexsarray[x].firstEdge; 
   if(null!=edge&&y==-1){ 
     int n=edge.adjvex; 
     //元素還不在stack中 
     if(!states.get(n)) 
       return n; 
     return -1; 
   } 
      
   while(null!=edge){ 
     //節(jié)點未訪問 
     if(edge.adjvex==y){ 
       if(null!=edge.nextEdge){ 
       next_node=edge.nextEdge.adjvex; 
       
       if(!states.get(next_node)) 
         return next_node; 
       } 
       else 
         return -1; 
     } 
     edge=edge.nextEdge; 
   } 
   return -1; 
 }
 
 
 
 public void visit(Graph graph,int x,int y){ 
    //初始化所有節(jié)點在stack中的情況 
     for(int i=0;i<graph.vexsarray.length;i++){ 
     states.put(i,false); 
   } 
     //stack top元素 
     int top_node; 
   //存放當前top元素已經訪問過的鄰接點,若不存在則置-1,此時代表訪問該top元素的第一個鄰接點 
     int adjvex_node=-1; 
   int next_node; 
   stack.add(x); 
   states.put(x,true); 
   
   while(!stack.isEmpty()){ 
     top_node=stack.peek(); 
     //找到需要訪問的節(jié)點 
        if(top_node==y){ 
       //打印該路徑 
       printPath(); 
       adjvex_node=stack.pop(); 
       states.put(adjvex_node,false); 
     } 
     else{ 
       //訪問top_node的第advex_node個鄰接點 
             next_node=getNextNode(graph,top_node,adjvex_node); 
       if(next_node!=-1){ 
         stack.push(next_node); 
         //置當前節(jié)點訪問狀態(tài)為已在stack中 
                 states.put(next_node,true); 
         //臨接點重置 
                 adjvex_node=-1; 
       } 
            //不存在臨接點,將stack top元素退出  
             else{ 
         //當前已經訪問過了top_node的第adjvex_node鄰接點 
                 adjvex_node=stack.pop(); 
         //不在stack中 
         states.put(adjvex_node,false); 
       } 
     } 
   } 
 } 
 
 
}

測試類:

package graph1;
 
import java.util.Iterator;
 
import graph1.Graph.VexNode;
 
public class Tset2 {
 
 public static void main(String[] args) {
 
 int[] vexs = {0,1,2,3,4};
 int[][] edges = {
  {0,1},
  {0,3},
  {1,0},
  {1,2},
  {2,1},
  {2,3},
  {2,4},
  {3,0},
  {3,2},
  {3,4},
  {4,2},
  {4,3},
  
 };
 Graph graph = new Graph();
 graph.buildGraph(vexs, edges);
 graph.printGraph();
 
 
 FindALlPath findALlPath = new FindALlPath();
 findALlPath.visit(graph, 4, 0);
 
 }
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java調用Oracle存儲過程詳解

    Java調用Oracle存儲過程詳解

    這篇文章主要介紹了Java調用Oracle存儲過程詳解的相關資料,需要的朋友可以參考下
    2017-02-02
  • spring boot配置ssl(多cer格式)超詳細教程

    spring boot配置ssl(多cer格式)超詳細教程

    這篇文章主要介紹了spring boot配置ssl(多cer格式)超詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • SpringBoot中修改依賴版本的方法

    SpringBoot中修改依賴版本的方法

    這篇文章主要介紹了SpringBoot中如何修改依賴的版本,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • java web學習_淺談request對象中get和post的差異

    java web學習_淺談request對象中get和post的差異

    下面小編就為大家?guī)硪黄猨ava web學習_淺談request對象中get和post的差異。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring AI集成DeepSeek三步搞定Java智能應用的詳細過程

    Spring AI集成DeepSeek三步搞定Java智能應用的詳細過程

    本文介紹了如何使用SpringAI集成DeepSeek,一個國內頂尖的多模態(tài)大模型,SpringAI提供了一套統一的接口,簡化了與不同AI模型的集成,通過配置文件和簡單的接口調用,開發(fā)者可以方便地使用DeepSeek進行數學推理、代碼生成等任務,感興趣的朋友一起看看吧
    2025-03-03
  • Spring?Boot?配置文件之類型、加載順序與最佳實踐記錄

    Spring?Boot?配置文件之類型、加載順序與最佳實踐記錄

    Spring?Boot?的配置文件是靈活且強大的工具,通過合理的配置管理,可以讓應用開發(fā)和部署更加高效,無論是簡單的屬性配置,還是復雜的多環(huán)境管理,Spring?Boot都提供了便捷的解決方案,本文介紹Spring?Boot?配置文件:類型、加載順序與最佳實踐,感興趣的朋友一起看看吧
    2025-04-04
  • Java數據結構之鏈表實現(單向、雙向鏈表及鏈表反轉)

    Java數據結構之鏈表實現(單向、雙向鏈表及鏈表反轉)

    這篇文章主要給大家介紹了關于Java數據結構之鏈表實現的相關資料,其中包括單向鏈表、雙向鏈表及鏈表反轉的實現代碼,需要的朋友可以參考下
    2021-06-06
  • java后臺驗證碼生成的實現方法

    java后臺驗證碼生成的實現方法

    在我們使用進行系統開發(fā)時,為了提高系統的安全性,在登錄的時候多數人都會要求輸入驗證,本文介紹了java后臺驗證碼生成的實現方法,感興趣的一起來了解一下
    2021-05-05
  • idea替換快捷鍵,批量處理對象的操作

    idea替換快捷鍵,批量處理對象的操作

    這篇文章主要介紹了idea替換快捷鍵,批量處理對象的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java基于遞歸算法實現漢諾塔問題實例

    java基于遞歸算法實現漢諾塔問題實例

    這篇文章主要介紹了java基于遞歸算法實現漢諾塔問題,結合具體實例形式分析了java遞歸算法的實現與使用技巧,需要的朋友可以參考下
    2017-07-07

最新評論

中方县| 巨野县| 锡林浩特市| 莫力| 黄梅县| 图片| 兖州市| 涞水县| 晋州市| 罗平县| 湟源县| 武汉市| 闽清县| 中江县| 宁德市| 南乐县| 子长县| 康平县| 崇阳县| 青阳县| 师宗县| 德昌县| 嘉义县| 绍兴市| 徐水县| 乃东县| 昭苏县| 澎湖县| 伊宁市| 陵水| 林西县| 滨州市| 浦城县| 杭锦旗| 平安县| 吉安市| 锡林郭勒盟| 泗洪县| 丰宁| 长沙市| 晋中市|