Graph dfs_euler

Graph dfs_euler

/ Euler Road und Euler Circuit /
/ *

  • Gehen Sie von einem Knoten in der ungerichteten Grafik aus eine Straße entlang, und jede Seite verläuft genau einmal. Eine solche Route wird Eulers Straße genannt
  • Wenn ein ungerichteter Graph verbunden ist und es höchstens zwei Singularitäten (ungerade Grade) gibt, muss es Eulers Pfad geben.
  • Wenn es zwei Singularitäten gibt, müssen sie der Ausgangspunkt sein und,
  • Wenn die Singularität nicht existiert, können Sie von jedem Punkt aus beginnen und schließlich zu dem Punkt zurückkehren, der als Eulers Schaltung bezeichnet wird
  • * /
import java.util.Stack;


public class 图的dfs_euler {
    
    
  static Stack<String> path = new Stack<>();
  //图的邻接矩阵
  private static int[][] graph = {
    
    
      {
    
    0, 1, 2, 1},
      {
    
    1, 0, 0, 0},
      {
    
    2, 0, 0, 1},
      {
    
    1, 0, 1, 0}
  };
  // 节点数
  private static final int n = 4;
  //标记边的访问情况,因为通路是双向的,所以用二维数组
  private static int[][] vis = new int[n][n];

  /**
   *
   * @param u 现在访问的顶点
   */
  static void euler(int u) {
    
    
    //其他顶点
    for (int v = 0; v < n; v++) {
    
    
      //有边,且访问次数少于连接数
      if (graph[u][v] > 0 && vis[u][v] < graph[u][v]) {
    
    
        //路是双向的
        vis[u][v]++;
        vis[v][u]++;
        //v作为新的起点,递归
        euler(v);
        //已走u->v,将这一步走法加入栈中
        path.push((char) ('A' + u) + "->" + (char) ('A' + v));
      }
    }
  }

  public static void main(String[] args) {
    
    
    euler(2);
    while (!path.isEmpty())
      System.out.println(path.pop());
  }

}

Ich denke du magst

Origin blog.csdn.net/weixin_45952706/article/details/109253011
Empfohlen
Rangfolge