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());
}
}