Go 稀疏数组模拟棋盘矩阵
Posted 知其黑、受其白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 稀疏数组模拟棋盘矩阵相关的知识,希望对你有一定的参考价值。
阅读目录
稀疏数组
应用示例
1、使用稀疏数组来保留类似前面的二维数组(棋盘、地图等待)
2、把稀疏数组存盘,并且可以从新恢复原理的二维数组。
1 创建一个原始数组
package main
import "fmt"
func main()
// 1、先创建一个原始数组
var chessMap [11][11]int
chessMap[1][2] = 1 // 黑子
chessMap[2][3] = 2 // 篮子
// 2、输出看看原始的数组
for _, v := range chessMap
for _, v2 := range v
fmt.Printf("%d\\t", v2)
fmt.Println()
PS E:\\TEXT\\test_go\\one> go run .\\main.go
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
PS E:\\TEXT\\test_go\\one>
2 转成稀疏数组
package main
import "fmt"
// 3.1 创建一个mode结构体
type ValNode struct
row int
col int
val int
func main()
// 1、先创建一个原始数组
var chessMap [11][11]int
chessMap[1][2] = 1 // 黑子
chessMap[2][3] = 2 // 篮子
// 2、输出看看原始的数组
for _, v := range chessMap
for _, v2 := range v
fmt.Printf("%d\\t", v2)
fmt.Println()
// 3、转成稀疏数组
/*思路
1、遍历 chessMap,如果我们发现有一个元素的值不为0,创建一个mode结构体。
2、将其放入到对应的切片即可
*/
// 稀疏数组通过切片来实现
var sparseArr []ValNode
// 标准的一个稀疏数组应该还有一个,记录元素的二维数组的规模(行和列,默认值)
// 初始节点
valNode := ValNode
row: 11,
col: 11,
val: 0,
sparseArr = append(sparseArr, valNode)
for i, v := range chessMap
for j, v2 := range v
if v2 != 0
// 创建一个 ValNode 值节点
valNode := ValNode
row: i,
col: j,
val: v2,
sparseArr = append(sparseArr, valNode)
// 输出稀疏数组
fmt.Println("当前的稀疏数组是:::::::")
for i, valNode := range sparseArr
fmt.Printf("%d:%d %d %d\\n", i, valNode.row, valNode.col, valNode.val)
PS E:\\TEXT\\test_go\\one> go run .\\main.go
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
当前的稀疏数组是:::::::
0:11 11 0
1:1 2 1
2:2 3 2
PS E:\\TEXT\\test_go\\one>
3 稀疏数组恢复恢复原始数据
package main
import (
"fmt"
)
// 3.1 创建一个mode结构体
type ValNode struct
row int
col int
val int
func main()
// 1、先创建一个原始数组
var chessMap [11][11]int
chessMap[1][2] = 1 // 黑子
chessMap[2][3] = 2 // 篮子
// 2、输出看看原始的数组
for _, v := range chessMap
for _, v2 := range v
fmt.Printf("%d\\t", v2)
fmt.Println()
// 3、转成稀疏数组
/*思路
1、遍历 chessMap,如果我们发现有一个元素的值不为0,创建一个mode结构体。
2、将其放入到对应的切片即可
*/
// 稀疏数组通过切片来实现
var sparseArr []ValNode
// 标准的一个稀疏数组应该还有一个,记录元素的二维数组的规模(行和列,默认值)
// 初始节点
valNode := ValNode
row: 11,
col: 11,
val: 0,
sparseArr = append(sparseArr, valNode)
for i, v := range chessMap
for j, v2 := range v
if v2 != 0
// 创建一个 ValNode 值节点
valNode := ValNode
row: i,
col: j,
val: v2,
sparseArr = append(sparseArr, valNode)
// 输出稀疏数组
fmt.Println("当前的稀疏数组是:::::::")
for i, valNode := range sparseArr
fmt.Printf("%d:%d %d %d\\n", i, valNode.row, valNode.col, valNode.val)
/*
将稀疏数组,存盘 d:/chesmap.data
如何恢复原始的数组
1、打开这个 d:/chesmap.data =》 恢复原始数据
2、这里使用稀疏数组恢复
*/
// 先创建一个原始数组
var chessMap2 [11][11]int
// 遍历 sparseArr
for i, v := range sparseArr
//跳过第一行的记录值,第一行的记录值用于定义需要多大的二维数组范围值
if i != 0
chessMap2[v.row][v.col] = v.val
// 看看 chessMap2 是否恢复原始数据
for _, v := range chessMap2
for _, v2 := range v
fmt.Printf("%d\\t", v2)
fmt.Println()
PS E:\\TEXT\\test_go\\one> go run .\\main.go
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
当前的稀疏数组是:::::::
0:11 11 0
1:1 2 1
2:2 3 2
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
PS E:\\TEXT\\test_go\\one>
以上是关于Go 稀疏数组模拟棋盘矩阵的主要内容,如果未能解决你的问题,请参考以下文章