在处理表格合并等问题时,可以考虑采用位图算法实现二维存储对象的处理
通过Map.Set设置点值或Map.Fill填充区域。
判断各点值时通过Map.Get获取
扩展Point属性可以改成3维或更多维实现多维存储对象的处理
/// <summary>
/// 二维图形算法
/// 王洪岐 121226
/// </summary>
/// <typeparam name="T"></typeparam>
public class Map<T>
{
private Dictionary<Point, T> _map;
/// <summary>
/// 构建图
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
public Map()
{
_map = new Dictionary<Point, T>();
}
/// <summary>
/// 填充图
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
public void Fill(Point a, Point b, T value)
{
for (int x = Math.Min(a.X, b.X); x <= Math.Max(a.X, b.X); x++)
{
for (int y = Math.Min(a.Y, b.Y); y <= Math.Max(a.Y, b.Y); y++)
{
_map[new Point(x, y)] = value;
}
}
}
/// <summary>
/// 设置单点值
/// </summary>
/// <param name="a"></param>
/// <param name="value"></param>
public void Set(Point p, T value)
{
_map[p] = value;
}
/// <summary>
/// 获取单点值
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
public T Get(Point p)
{
return _map.ContainsKey(p) ? _map[p] : default(T);
}
/// <summary>
/// 显示点
/// </summary>
/// <returns></returns>
public string ShowPoint()
{
int intMaxX= _map.Keys.Max(p=>p.X);
int intMaxY= _map.Keys.Max(p=>p.Y);
StringBuilder sbReturn = new StringBuilder();
for (int y = 0; y <= intMaxY; y++)
{
for (int x = 0; x <= intMaxX; x++)
{
sbReturn.Append(_map.ContainsKey(new Point(x, y))?"1":"0");
}
sbReturn.Append("\n");
}
return sbReturn.ToString();
}
}
/// <summary>
/// 点坐标
/// </summary>
public struct Point
{
private int _X;
private int _Y;
/// <summary>
///
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
public Point(int x, int y)
{
_X = x;
_Y = y;
}
/// <summary>
/// X
/// </summary>
public int X
{
get
{
return _X;
}
set
{
_X = value;
}
}
/// <summary>
/// Y
/// </summary>
public int Y
{
get
{
return _Y;
}
set
{
_Y = value;
}
}
}
C#位图算法
原创
©著作权归作者所有:来自51CTO博客作者草宝虫啊的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【C】排序算法
文章介绍了几种常用的排序,包括其实现思路与具体代码实现。
排序 算法 代码分析 -
C#位图BitArray 小试牛刀
前面聊了布隆过滤器,回归认识一下位图BitMap,阅读前文的同学应该发现了布隆过滤器本身就是基于位图,是位图
位图 数组 布隆过滤器 数据结构 数据 -
位图算法
我的小站——半生瓜のblog位图算法已空间换时间。很多不重复的整数,其中最大值不超
算法 c++ 位或 初始化 数据 -
android 显示数学公式
极度公式是一款强大的跨平台专业 LaTeX 公式软件。支持公式字符编辑与录入、公式模板选择,对于重要公式支持云备份。也可以手机端(安卓)拍照桌面端编辑(Windows、Mac)等实用功能。化繁为简,助您更高效率办公!将手写公式或纸张上的公式,输出复制到剪贴板,这些输出可以轻松粘贴到 LaTeX 编辑器中,如 Overleaf、标记编辑器(如 Typora、Microsoft Word 等)等。支持
android 显示数学公式 excel公式编辑器 latex大括号 多行公式 typora 公式对齐 数学公式