Golang数据结构与算法之稀疏矩阵

前言

先看一个实际的需求:编写的五子棋程序中,有存盘退出和续盘恢复的功能:

在这里插入图片描述

1.需求分析:

分析按照原始的方式来的二维数组的问题,因为该二维数组的很多值是默认值 0, 因此记录了很多没有意义的数据。稀疏数组的处理方法是:
1) 记录数组一共有几行几列,有多少个不同的值 。
2) 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。
3) 把稀疏数组存盘,并且可以从新恢复原来的二维数组数。

在这里插入图片描述

2、代码实现

代码如下(示例):

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"strconv"
	"strings"
)
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 _,j := range v {
   
			fmt.Printf("%d\t",j)
		}
		fmt.Println()
	}
	//3. 转成稀疏数组。
	//(1). 遍历 chessMap, 如果我们发现有一个元素的值不为 0,创建一个 node 结构体
	//(2). 将其放入到对应的切片即可
	var sparseArr []ValNode
	//标准的一个稀疏数组应该还有一个 记录元素的二维数组的规模(行和列,默认值)
	//创建一个 ValNode 值结点
	valNode := ValNode{
   
		row : 11,
		col : 11,
		val : 0,
	}
	sparseArr = append(sparseArr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值