package main
import (
"fmt"
)
func main() {
nodes := [][]int{{1,5},{1,7},{2,5},{3,5},{3,6},{4,7},{4,8}}
graph := make(map[int][]int)
for _,v := range nodes{
from, to := v[0]-1, v[1]-1
graph[from] = append(graph[from], to)
}
n := 8
matching := make([]int, n)
check := make([]bool, n)
for i := range matching {
matching[i] = -1
}
var dfs func(u int) bool
dfs = func(u int) bool {
nodes := graph[u]
for _,v := range nodes {
if !check[v] {
check[v] = true
if matching[v] == -1 || dfs(matching[v]) {
matching[v] = u
matching[u] = v
return true
}
}
}
return false
}
var hungarian func()
hungarian = func(){
ans := 0
for u:=0;u<n/2;u++{
if matching[u] == -1 {
for i:= range check {
check[i] = false
}
if dfs(u) {
ans++
}
}
fmt.Println(check)
fmt.Printf("match: %v\n", matching)
}
fmt.Println(ans)
}
hungarian()
}