遇到的问题: 1、由于所有语句必须在函数中,所以无法通过 := 声明全局变量,全局变量只能通过 var 进行声明 var A int = 1
2、:=会创建局部变量
3、实现队列:
//创建
stack := make([]int, 0)
//push
stack = append(stack, 10)
//pop
V := stack[0]
stack = stack[1:len(stack)-1]
//检查栈空
len(stack)==0
4、go的append都是尾部插入
5、切片slice:a[a:b]从a位置连续b长度的数组
6、函数返回值:多参数、单参数
//单个返回值
func func_name(a, b int) int { //同类型,可以省略 a, b int
return a + b
}
//多个返回值
func func_name(a, b int) (c int, err error) { //返回值还可以是 (int, error)
return a+b, nil
}
func SumAndProduct(A, B int) (int, int) {
return A+B, A*B
}
7、if-else 必须加大括号
8、没有 !low 的形式
9、go居然不提供整数的min函数,只提供浮点数的min函数
10、Scanf换行读入有问题
求最大匹配源码
package algorithm
import "fmt"
type edge struct {
u int
next int
rong int
liu int
}
const maxm int = 200010
const maxn int = 1010
const inf int = 0x3f3f3f3f
var e [maxm]edge
var vis [maxn]int
var dep [maxn]int
var head [maxn]int
var cnt int = 0
func Init() {
for i := 0; i < maxn; i++ {
head[i] = -1
}
}
func add(u int, v int, rong int) {
e[cnt].u = v
e[cnt].next = head[u]
e[cnt].rong = rong
head[u] = cnt
e[cnt].liu = 0
cnt = cnt + 1
}
func adde(u, v, rong int) {
add(u, v, rong)
add(v, u, 0)
}
func bfs(s int, t int) bool {
for i := 0; i <= t; i++ {
vis[i] = 0
dep[i] = inf
}
q := make([]int, 0)
q = append(q, s)
vis[s] = 1
dep[s] = 0
for len(q) > 0 {
u := q[0]
if len(q) > 1 {
q = q[1:]
} else {
q = nil
}
vis[u] = 0
//fmt.Print(dep[u], "\n")
for i := head[u]; i != -1; i = e[i].next {
//fmt.Print("spfa:", u, " ", e[i].u, " ", e[i].rong, " ", e[i].liu, " ", dep[e[i].u], "\n")
if e[i].rong > e[i].liu && dep[e[i].u] > dep[u]+1 {
dep[e[i].u] = dep[u] + 1
if vis[e[i].u] == 0 {
q = append(q, e[i].u)
vis[e[i].u] = 1
}
}
}
}
//fmt.Print(dep[t], "\n")
return dep[t] != inf
}
func Min(x, y int) int {
if x < y {
return x
}
return y
}
func dfs(u, t, low int) int {
if low == 0 || u == t {
return low
}
fenliu := 0
liu := 0
for i := head[u]; i != -1; i = e[i].next {
v := e[i].u
if dep[v] == dep[u]+1 {
fenliu = dfs(v, t, Min(low, e[i].rong-e[i].liu))
if fenliu > 0 {
//fmt.Print("dfs:", u, " ", v, " ", fenliu, "\n")
liu += fenliu
e[i].liu += fenliu
e[i^1].liu -= fenliu
low -= fenliu
if low == 0 {
break
}
}
}
}
return liu
}
func Maxflow() {
Init()
var n int
var m int
var s int = 0
var t int
var E int
fmt.Scan(&n, &m, &E)
// fmt.Printf("%d %d", n, m)
t = n + m + 1
for i := 1; i <= E; i++ {
u := 1
v := 1
fmt.Scan(&u, &v)
v += n
//fmt.Printf("%d %d", u, v)
adde(u, v, 1)
}
for i := 1; i <= n; i++ {
adde(s, i, 1)
}
for i := 1; i <= m; i++ {
adde(i+n, t, 1)
}
ans := 0
for bfs(s, t) {
ans += dfs(s, t, inf)
}
// for i := 0; i <= n+m+1; i++ {
// for j := head[i]; j != -1; j = e[j].next {
// fmt.Print(i, " ", e[j].u, " ", e[j].rong, " ", e[j].liu, "\n")
// }
// }
fmt.Printf("%d\n", ans)
}
/*
6
3
1 4
2 5
3 6
*/