数据结构稀疏算法 - Go语言中文社区

数据结构稀疏算法


package main

import "fmt"

//稀疏数组示例
//五子棋,棋盘上第二行,第三列有个黑子,第三行,第4列有个蓝色棋子



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.转换层稀疏数组
	//遍历原始chessMap,如果我们发现有一个元素的值不为0,创建一个node结构体
	//将其放入对应的切片即可

	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:=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)
}



//2.稀疏数组的恢复

	//先创建一个原始数组
	var chessMap2 [11][11]int

	//遍历sparseArr【遍历文件的每一行】
	//0:11 11 0
	//1:1 2 1
	//2:2 3 2
	for i,valNode:=range sparseArr{
		if i!=0{//跳过第一行 11,11,0 默认11X11值为0
			chessMap2[valNode.row][valNode.col]=valNode.val


		}
	}
	fmt.Println("回复后的原始数据.....")
	for _,v:=range chessMap2{
		for _,v2:=range v{
			fmt.Printf("%d\t",v2)
		}
		fmt.Println()
	}


}

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wtt234/article/details/124300998
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-02 12:00:42
  • 阅读 ( 214 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢