稀疏算法

需求:有11*11的棋盘,下棋到一半时想保存退出

算法思想:将棋盘模拟成矩阵,仅保存有数据的位置, 也叫压缩数据

package main

import "fmt"

type Node struct{
	row int
	col int
	val int
}

func main() {
	// 定义稀疏数组并打印
	var Array[11][11] int
	Array[1][2] = 2
	Array[2][3] = 4
	
	for _, val := range Array{
		for _, v := range val{
			fmt.Printf("%d\t", v)
		}
		fmt.Println()
	}

	// 将稀疏数组数据压缩存放进SparseNode
	var SparseNode []Node
	firstNode := Node{11,11,0}
	SparseNode = append(SparseNode, firstNode)

	for i, val := range Array{
		for j, v := range val{
			if v != 0{
				node := Node{
					row: i,
					col: j,
					val: v,
				}
				SparseNode = append(SparseNode, node)
			}
		}
	}

	//将存放的压缩数据打印
	for i, node := range SparseNode{
		fmt.Printf("%d: %d %d %d\n", i, node.row, node.col, node.val)
	}

	// 将压缩数据还原成数组
	var newArray[11][11] int
	for i, node := range SparseNode{
		if i !=0{
			newArray[node.row][node.col] = node.val
		}

	}

	// 再次验证
	for _, val := range newArray{
		for _, v := range val{
			fmt.Printf("%d\t", v)
		}
		fmt.Println()
	}

}

运行结果:
在这里插入图片描述

注意事项:
1、要保存下棋盘的行和列
2、读取时要记得第一列是棋盘的行和列,否则容易出现数组越界

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值