← Home
For problem statement at 1000-1999/1100-1199/1130-1139/1130/problemC.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1130-1139/1130/verifierC.go ends with All 100 tests passed. can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

type Pair struct {
	r, c int
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	fmt.Fscan(in, &n)
	var r1, c1, r2, c2 int
	fmt.Fscan(in, &r1, &c1)
	fmt.Fscan(in, &r2, &c2)
	r1--
	c1--
	r2--
	c2--

	grid := make([]string, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &grid[i])
	}

	dirs := []Pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}

	visited1 := make([][]bool, n)
	for i := range visited1 {
		visited1[i] = make([]bool, n)
	}
	comp1 := []Pair{}
	q := []Pair{{r1, c1}}
	visited1[r1][c1] = true
	for len(q) > 0 {
		p := q[0]
		q = q[1:]
		comp1 = append(comp1, p)
		for _, d := range dirs {
			nr, nc := p.r+d.r, p.c+d.c
			if nr >= 0 && nr < n && nc >= 0 && nc < n && !visited1[nr][nc] && grid[nr][nc] == '0' {
				visited1[nr][nc] = true
				q = append(q, Pair{nr, nc})
			}
		}
	}

	if visited1[r2][c2] {
		fmt.Fprintln(out, 0)
		return
	}

	visited2 := make([][]bool, n)
	for i := range visited2 {
		visited2[i] = make([]bool, n)
	}
	comp2 := []Pair{}
	q = []Pair{{r2, c2}}
	visited2[r2][c2] = true
	for len(q) > 0 {
		p := q[0]
		q = q[1:]
		comp2 = append(comp2, p)
		for _, d := range dirs {
			nr, nc := p.r+d.r, p.c+d.c
			if nr >= 0 && nr < n && nc >= 0 && nc < n && !visited2[nr][nc] && grid[nr][nc] == '0' {
				visited2[nr][nc] = true
				q = append(q, Pair{nr, nc})
			}
		}
	}

	minCost := int(1<<31 - 1)
	for _, a := range comp1 {
		for _, b := range comp2 {
			dr := a.r - b.r
			dc := a.c - b.c
			cost := dr*dr + dc*dc
			if cost < minCost {
				minCost = cost
			}
		}
	}

	fmt.Fprintln(out, minCost)
}