func main() { var ( rows int cols int n int ) fmt.Scan(&rows,&cols) matrix := make([][]int,rows) for i:=0;i<rows;i++ { matrix[i] = make([]int,cols) for j:=0;j<cols;j++ { fmt.Scan(&n) matrix[i][j] = n } } printMatrixZigZag(matrix) }
func printMatrixZigZag(matrix [][]int) { tR := 0 tC := 0 dR := 0 dC := 0 endR := len(matrix) -1 endC := len(matrix[0]) -1 fromUp := false for tR != endR+1 { printLevel(matrix,tR,tC,dR,dC,fromUp) if tC == endC { tR = tR + 1 } else { tC = tC + 1 } if dR == endR { dC = dC + 1 } else { dR = dR + 1 } fromUp = !fromUp } }
func printLevel(matrix [][]int,tR, tC, dR, dC int, fromUp bool) { if fromUp { for tR != dR +1 { fmt.Printf("%d ",matrix[tR][tC]) tR ++ tC -- } } else { for dR != tR -1 { fmt.Printf("%d ",matrix[dR][dC]) dR -- dC ++ } } }