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 稀疏数组模拟棋盘矩阵的主要内容,如果未能解决你的问题,请参考以下文章

设计算法,将m*n稀疏矩阵转换成三元组表示,并分析其时间复杂度和空间复杂度

JAVA描述算法和结构(01):稀疏数组和二维数组转换

JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

稀疏矩阵的运算

如何加快稀疏数组加法

数组稀疏矩阵广义表综合应用