Example #1
0
// NewGraphFromPGSolverFile builds a new graph using a file, given as
// argument, that can be generated through PGSolver's generation tools
// or that respects the very same format.
func NewGraphFromPGSolverFile() *Graph {
	fmt.Println("Parsing Graph from .....", flag.Args()[0])
	defer utils.TimeTrack(time.Now(), "Parsed")
	numnodes := -1
	fds, _ := os.Open(flag.Args()[0])
	defer fds.Close()
	file := bufio.NewReader(fds)
	first, err := file.ReadString((byte)('\n'))
	if strings.Contains(first, "parity") {
		first_split := strings.Split(first, " ")
		numnodes, _ = strconv.Atoi(first_split[1][:len(first_split[1])-2])
	} else if err != nil {
		fmt.Fprintln(os.Stderr, "Error when reading from the file:", err)
	}
	G := NewGraph(numnodes + 1)
	wg := &sync.WaitGroup{}
	for {
		line, err := file.ReadString((byte)('\n'))
		if err == io.EOF {
			break
		}
		wg.Add(1)
		go addLineToGraph(G, line, wg)
	}
	wg.Wait()
	return G
}
// Win is implemented by RecursiveImproved and returns
// the solution for a given game in input
func (c *ConcurrentSolver) Win(G *graphs.Graph) ([]int, []int) {
	defer utils.TimeTrack(time.Now(), "Solved with Concurrent")
	removed := make([]bool, len(G.Nodes))
	res1, res2 := c.win(G, removed)
	return res1, res2
}
// Win is implemented by RecursiveImproved and returns
// the solution for a given game in input
func (r *RecursiveImproved) Win(G *graphs.Graph) ([]int, []int) {
	defer utils.TimeTrack(time.Now(), "Solve with Recursive")
	removed := make([]bool, len(G.Nodes))
	res1, res2 := r.win(G, removed)
	return res1, res2
}