Я пытаюсь реализовать алгоритм поиска соединения с помощью Go. Я хочу реализовать различные стратегии, такие как Быстрый поиск, быстрый союз и взвешенный быстрый союз с использованием одной структуры UnionFind
см. Ниже. Я поставил код в пакет unionfind
Как организовать код Go в пакетах
package unionfind
type Unionfind struct {
elements []int
}
func makeUnionfind(n int) Unionfind {
elements := make([]int, n)
for idx := range elements {
elements[idx] = idx
}
return Unionfind{elements}
}
Далее я создаю функции для различных стратегий, начиная с quick find
. Пример ниже не работает. Но я понятия не имею, где указать конкретный код стратегии, как назвать пакет и как импортировать общий тип структуры.
// create a separate package for each strategy?
package quickfind
// import the structure locally?
import ufp "./unionfind"
// prefer methods over functions for convenience?
func (uf *ufp.Unionfind) union(a int, b int) {
aroot := uf.elements[a]
broot := uf.elements[b]
for k, v := range uf.elements {
if v == aroot {
uf.elements[k] = broot
}
}
}
func (uf *ufp.Unionfind) connected(a int, b int) bool {
return uf.elements[a] == uf.elements[b]
}
Как мне организовать мой код Получить быстро найти алгоритм работает, но имеют UnionFind
структуры разделены?
Вы уверены, эти сохраненные версии исходных файлов? Эта ошибка говорит о том, что файл 'quickfind.go' говорит' пакет quickfind' (на самом деле, похоже, вы дважды вставляли один и тот же файл. Что такое quickfind.go?) – JimB
@JimB Спасибо, я скопировал первый файл два раза. Теперь это должно быть правильно. – sschmeck
У вас не может быть двух пакетов в одной папке. Прочтите https://golang.org/doc/code.html – fl0cke