func (g *Graph) MakeNode() Node {
	newNode := &node{index: len(g.nodes)}
	newNode.container = Node{node: newNode, Value: new(interface{})}
	g.nodes = append(g.nodes, newNode)
	return newNode.container
}
MakeNode creates a node, adds it to the graph and returns the new node.
package graph
import (
	"errors"
)
type GraphType int
const (
	Undirected GraphType = iota
	Directed
)
type Graph struct {
	nodes []*node
	Kind  GraphType
}
type node struct {
	edges         []edge
	reversedEdges []edge
	index         int
	state         int    
	data          int    
	parent        *node  
	container     Node   
}
type Node struct {
	node *node
	Value *interface{}
}
type edge struct {
	weight int
	end    *node
}
type Edge struct {
	Weight int
	Start  Node
	End    Node
}
func New(kind GraphType) *Graph {
	g := &Graph{}
	if kind == Directed {
		g.Kind = Directed
	}
	return g
}