能否从无向图中的一个结点走出一条道路,每条边恰好经过一次,这样的路线称为欧拉道路
(可一笔画搞定)。
欧拉回路
:不能一笔画搞定。
如果一个无向图是连通的 且 无向图中奇点的个数为 1 或 2,则一定存在欧拉道路。
注意
:要以度数为奇数的结点作为起点!!
import java.util.Stack;
public class Main{
static Stack<String> path = new Stack<>();
static int [][] graph = {
{0,1,2,1},
{1,0,0,0},
{2,0,0,1},
{1,0,1,0}};
//节点数
static int n = 4;
//标记函数
static int[][] vis = new int[n][n]; // vis[u][v]代表u,v两点间的已访问次数
private static void dfs(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作为新的起点,递归
dfs(v);
path.push((char)('A'+u)+ "->" + (char)('A'+v));
}
}
}
public static void main(String[] args) {
dfs(1);
while(!path.isEmpty())
System.out.println(path.pop());
}
}