package main
import "fmt"
/*
稀疏数组
案例:五子棋存盘与复盘
节省存储空间
*/
type ValNode struct {
row int //行
col int //列
val int //值
}
//原始数组实现
func normalArray() {
var chessMap [11][11]int
chessMap[1][2] = 1 //黑子
chessMap[2][3] = 2 //白子
//输出
for _, v := range chessMap {
for _, v2 := range v {
fmt.Printf("%d ", v2)
}
fmt.Println()
}
}
//稀疏数组实现
func sparseArray() {
//数据源
var chessMap [11][11]int
chessMap[1][2] = 1 //黑子
chessMap[2][3] = 2 //白子
//切片
var sparseArr []ValNode
//创建一个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{
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)
}
var chessMap2 [11][11]int
//稀疏数组恢复原始数组
for i, valNode := range sparseArr {
//跳过第一行默认记录值
if i != 0 {
chessMap2[valNode.row][valNode.row] = valNode.val
}
}
//输出恢复后的数组
for _,v:=range chessMap2{
for _,v2:=range v{
fmt.Printf("%d ",v2)
}
fmt.Println()
}
}
func main() {
sparseArray()
}