寻找一种更有效的方法来创建 4 向链表

邱志强

我正在尝试创建一个方法,该方法将链接在名为 CellGrid[,] 的二维数组中设置的所有 Cell 对象

我的问题是:由于 SetDirection() 中的大部分代码都非常相似,似乎有更好的方法来实现我的目标。

(旁注:这是功能性的,但执行感觉“关闭”)

private void SetDirection()
    {
        int x = 0, y = 0;
        for ( int i = 0 ; i < Size * (Size - 1);)//setting all UP pointers
        {
            if ( i == 0 ) { x = 0; y = 1;}//initial setup
            for ( x = 0 ; x < Size ; x++ )
            {
                CellGrid[x,y].SetPointer(CellGrid[x,y-1] , Direction.Up );
                i++;
            }
            y++;
        }
        for ( int i = 0 ; i < Size * (Size - 1);) //setting all DOWN pointers
        {
            if ( i == 0 ) { x = 0; y = 0;}//initial setup
            for ( x = 0 ; x < Size ; x++ )
            {
                CellGrid[x,y].SetPointer(CellGrid[x,y+1], Direction.Down);
                i++;
            }
            y++;
        }
        for ( int i = 0 ; i < Size * (Size - 1);)//setting all LEFT pointers
        {
            if ( i == 0 ) { x = 1; y = 0;}//initial setup
            for ( y = 0 ; y < Size ; y++ )
            {
                CellGrid[x, y].SetPointer( CellGrid[x-1,y], Direction.Left);
                i++;
            }
            x++;
        }
        for ( int i = 0 ; i < Size * (Size - 1);) //setting all RIGHT pointers
        {
            if ( i == 0 ) { x = 0; y = 0;}//initial setup
            for ( y = 0 ; y < Size ; y++ )
            {
                CellGrid[x, y].SetPointer( CellGrid[x+1,y], Direction.Right);
                i++;
            }
            x++;
        }
    }
public void SetPointer( Cell cellRef ,GridBuilder.Direction dir)
    {
        switch ( dir )
        {
            case GridBuilder.Direction.Up:
                this.Up = cellRef;
                break;
            case GridBuilder.Direction.Down:
                this.Down = cellRef;
                break;
            case GridBuilder.Direction.Left:
                this.Left = cellRef;
                break;
            case GridBuilder.Direction.Right:
                this.Right = cellRef;
                break;
        }
    }
特里科特

您确实可以使用一组循环在所有四个方向上建立链接。这是基于两个想法:

  • 设置链接时,立即在相同的两个单元格之间设置相反方向的链接。
  • 设置链接时,立即设置位于镜像位置的两个单元格之间的链接——由主对角线 (x <--> y) 镜像。
private void SetDirection() {
    for (int i = 1; i < Size; i++) {
        for (int j = 0; j < Size; j++) {
            CellGrid[i, j].SetPointer(CellGrid[i-1, j], Direction.Left);
            CellGrid[i-1, j].SetPointer(CellGrid[i, j], Direction.Right);
            CellGrid[j, i].SetPointer(CellGrid[j, i-1], Direction.Up);
            CellGrid[j, i-1].SetPointer(CellGrid[j, i], Direction.Down);
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

寻找一种更有效的方法来根据数据框列中的字典创建新列

Neo4j是否有一种更有效的方式来编写多个where-contains?

在JavaScript中,哪一种是向数组添加新元素的更有效方法?

一种更有效的方法来对netstat命令的结果进行排序

尝试创建一种方法来检查数组是否仅包含1或4

有没有更干净或更有效的方法来删除出现在另一个已排序链表中的已排序链表中的所有值?

寻找一种比COUNTIFS和MINIFS更有效的方法来比较多行

有没有一种更有效的方法来在Access中存储对象容器?

一种更有效的方法来检查是否没有相关项目具有特定值

是否有一种更有效的方法来将图像居中在浮动div中

如何创建一种更有效的方法来解析两个大文本文件之间的单词(Python 3.6.4)

寻找一种更有效的方式来初始化字典

寻找一种有效的方法来重用一组小部件或替代方案

寻找一种有效的方法来返回字符串的一部分

有没有一种标准的C方法来“完美”打印Dragon4的浮点值?

寻找一种有效的方法来重塑数据框:从n * m到1 *(n + m)

是否有一种简单的方法来重置P4客户端视图(命令行)?

这些向JavaScript中的现有对象添加属性的方法有何不同(一种有效,一种无效)?

寻找一种更有效的方法来使用 STL 函数检查字符串是否为回文

有没有一种比pythonic /更有效的方法来遍历包含列表的字典,而不是使用for循环?

有没有一种比Python中的list.sort()更有效的方法来对列表进行排序?

有没有一种更有效的方法来枚举python或R中离散随机变量的每个可能结果的概率?

寻找一种更短,更有效的方式来添加(可能)重复到字符串末尾的内容

有没有一种更干净的方法来编辑UIView框架的4个CGRect值之一?

有没有一种更干净的方法来遍历所有二进制4元组?

Pythonic Logic - 寻求一种更有效的方法来检查检查 0 和 1 列表的多个 if 语句

试图找到一种更有效的方法来进行多次替换,而无需在 jQuery 中重复相同的代码

C# 我需要一种更有效的方法来检查多个复选框中的值以更改 bool

有没有一种优雅的方法来询问集线器,向其注册的节点可以运行的浏览器实例的最大数量?