gpt4 book ai didi

c# - 需要对复杂的对象进行排序,例如多米诺骨牌

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:38 24 4
gpt4 key购买 nike

这是一种情况。例如我有这样的结构(代码被简化):

class Dominoe 
{
ctor Dominoe(left, right)

string LeftSide;
string RightSide;
}

我有数据,有点像这样:

Dominoe("2", "3"), Dominoe("1", "2"), Dominoe("4", "5"), Dominoe("3", "4")

我知道骨牌不会有空隙,也不会重复。我需要订购此系列,以便每个 RightSide 都连接到适当的 LeftSide。像这样:

Dominoe("1", "2"), Dominoe("2", "3"), Dominoe("3", "4"), Dominoe("4", "5")

值 - 不是数字。只需要一个线索。

现在我分两步完成了这个任务。主要 - 我正在寻找切入点。具有 LeftSide 的多米诺骨牌未出现在任何其他多米诺骨牌 RightSide 中。之后我用 0 索引项切换它。其次 - 我正在寻找下一个多米诺骨牌,它的左侧与我的入口多米诺骨牌的右侧相同,依此类推。

我在 C# 中执行此操作,但这并不重要。

问题是 - 我不认为这是最好的算法。任何想法都会很棒。谢谢。

已编辑!

谈论数字是我不好吗。

让我们将多米诺骨牌换成旅行卡。

所以它会像:

TravelCard ("Dublin", "New York"), TravelCard ("Moscow", "Dublin"), TravelCard ("New York", "Habana")

最佳答案

除非您有大量卡片,否则您的解决方案将有效。否则,您可以考虑使用 2 个字典来使搜索常量并保持 O(N) 复杂度:

namespace ConsoleApplication
{
public class Dominoe
{
public Dominoe(int left, int right)
{
LeftSide = left;
RightSide = right;
}

public int LeftSide;
public int RightSide;
}

class Program
{
static void Main(string[] args)
{
var input = new List<Dominoe>()
{
new Dominoe(2, 3),
new Dominoe(1, 2),
new Dominoe(4, 5),
new Dominoe(3, 4)
};

var dicLeft = new Dictionary<int, Dominoe>();
var dicRigth = new Dictionary<int, Dominoe>();

foreach (var item in input)
{
dicLeft.Add(item.LeftSide, item);
dicRigth.Add(item.RightSide, item);
}

Dominoe first = null;

foreach(var item in input)
{
if (!dicRigth.ContainsKey(item.LeftSide))
{
first = item;
break;
}
}

Console.WriteLine(string.Format("{0} - {1}", first.LeftSide, first.RightSide));

for(int i = 0; i < input.Count - 1; i++)
{
first = dicLeft[first.RightSide];
Console.WriteLine(string.Format("{0} - {1}", first.LeftSide, first.RightSide));
}

Console.ReadLine();
}
}
}

关于c# - 需要对复杂的对象进行排序,例如多米诺骨牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36598168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com