Đường đi Euler (Eulerian path) đi qua mỗi cạnh đúng một lần. Đồ thị có hướng có đường đi Euler khi:
- Đồ thị liên thông.
- Tồn tại đỉnh a với
out_deg = in_deg + 1(đỉnh bắt đầu). - Tồn tại đỉnh b với
in_deg = out_deg + 1(đỉnh kết thúc). - Các đỉnh còn lại:
in_deg = out_deg.
Thuật toán
- Kiểm tra liên thông (DFS/BFS).
- Tính in-degree và out-degree cho mỗi đỉnh.
- Áp dụng điều kiện trên.
Ví dụ code (ma trận kề 5x5)
#include <iostream>
#include <vector>
#define NODE 5
using namespace std;
int graph[NODE][NODE] = {
{0,0,1,1,0},
{1,0,1,0,0},
{0,0,0,1,0},
{0,1,0,0,1},
{1,0,0,0,0}
};
void dfs(int u, vector<bool>& vis) {
vis[u] = true;
for (int v=0; vKết quả
Có đường đi Euler