func main() { var ( grid maze.Grid al alg.Algorithm ) // choose grid type if dijkstra { grid = maze.NewDistanceGrid(row, col) } else { grid = maze.NewNormalGrid(row, col) } // choose algorithm to use switch flag.Arg(0) { case "binarytree": al = alg.NewBinaryTree() case "sidewinder": al = alg.NewSidewinder() case "recursivebacktracker": al = alg.NewRecursiveBacktracker(grid.Random()) default: panic("unknown algorithm") } // generate a maze by al al.On(grid) fmt.Println(grid.String()) fmt.Printf("%d dead-ends\n", len(grid.DeadEnds())) // braid grid.Braid(braid) if dijkstra { start := grid.Get(0, 0) grid.(*maze.DistanceGrid).Distances = start.Distances() } fmt.Println(grid.String()) fmt.Printf("%d dead-ends\n", len(grid.DeadEnds())) }