结果都是1
来源:12-2 迷宫代码实现

慕哥9561112
2020-10-30
package main
import (
“fmt”
“os”
)
func readMaze(fileName string) [][]int{
file,err:=os.Open(fileName)
if err != nil{
panic(err)
}
var row,col int
fmt.Fscanf(file,"%d %d",&row,&col)
maze:=make([][]int,row)
for i:= range maze{
maze[i] = make([]int,col)
fmt.Fscanln(file)
for j:=range maze[i]{
fmt.Fscanf(file ,"%d",&maze[i][j])
}
}
return maze
}
type point struct {
i,j int
}
var dirs = [4]point{
{-1,0},{0,-1},{0,1},{1,0},
}
func (p point) add(r point) point {
return point{p.i+r.i,p.j+r.j}
}
func (p point) at (grid [][]int) (int, bool) {
if p.i<0||p.i>=len(grid){
return 0,false
}
if p.j<0 ||p.j>=len(grid[p.i]) {
return 0,false
}
return grid[p.i][p.j], true
}
func walk(maze [][]int,start,end point) [][]int {
steps :=make([][]int,len(maze))
for i:=range steps{
steps[i]=make([]int,len(maze[i]))
}
//创建一个存放节点数据的队列
Q :=[]point{start}
for len(Q)>0{
cur :=Q[0]
Q=Q[1:]
if cur ==end{
break
}
for _,dir :=range dirs{
next :=cur.add(dir)
val,ok:=next.at(maze)
if !ok || val ==1 {
continue
}
val,ok=next.at(steps)
if !ok || val !=0 {
continue
}
if next==start{
continue
}
curSteps,_ :=next.at(steps)
steps[next.i][next.j]=curSteps+1
Q=append(Q,next)
}
}
return steps
}
func main() {
maze:=readMaze(“maze/maze.in”)
steps:=walk(maze,point{0,0},point{len(maze)-1,len(maze[0])-1})
for _,row:=range steps{
for _,col:=range row{
fmt.Printf("%3d",col)
}
fmt.Println()
}
}
代码是这样结果执行出来是:
0 0 1 1 1
1 1 1 0 1
1 0 1 0 1
0 0 0 1 1
0 0 1 1 0
0 0 1 1 1
不知道是哪里的错?
2回答
-
不会我就学
2024-01-17
func readMaze(filename string) [][]int { //返回二维数组 file, err := os.Open(filename) if err != nil { panic(err) } var row, col int fmt.Fscanf(file, "%d %d", &row, &col) fmt.Println(row, col) maze := make([][]int, row) //建造行 fmt.Fscanln(file) for i := range maze { maze[i] = make([]int, col) //建造列 for j := range maze[i] { fmt.Fscanf(file, "%d", &maze[i][j]) } fmt.Fscanln(file) } return maze }
应该是正确的
00 -
ccmouse
2020-11-02
在Windows下,换行符是\r\n。我的代码似乎只能正确处理\n的情况
Go语言的FScanf有这样的bug。在Windows下,我们可以在读完一行内容后,加上fmt.Fscanln(file)来解决这个问题。这个bug目前处于open状态:https://github.com/golang/go/issues/23562
看一下是不是这个原因
00
相似问题