我在完成这项任务时遇到了问题:n顶点图是一个蝎子,如果它有一个顶点1(sting)连接到一个顶点2(尾部)连接一个顶点3(身体)连接到另一个顶点(脚)。一些脚可能连接到其他脚。设计一种算法,决定给定的图形是否代表蝎子,并告诉哪条线是刺,尾,体和脚。 这是我的数据文件: (+) is where is edge and (-) where are no edges
我试图先找到刺痛但我基本上可以搜索尾巴和身体的连接? 我也必须使用递归 修改 好了,我已经找到了多少" +"每行都有:
int[] B = new int[100];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
int HowMuch = Regex.Matches(A[i,j], @"\+").Count;
Saving[i] += HowMuch;
}
if(Saving[i]>=3)
{
Console.WriteLine("It's a scorpion!");
Console.WriteLine("The body is in: " + i + " part");
}
}
随着递归,我试图找到路径连接......我该如何继续?
static void Find(string[,] A, int n, int j)
{
for (int i = 0; i < n; i++)
{
if(A[i,j]=="+")
{
j = i;
Find(A, n, j);
}
}
}
答案 0 :(得分:2)
所以,我告诉你如何解决这个问题。我从this获得了帮助。你应该看看那里。该网站有一个提示。
我的方法与他们的方法略有不同。
从抽象的角度来看,你要从邻接矩阵中确定给定的点是否像这个图像(也就是蝎子)。 (取自该网站)
现在,邻接矩阵如何转换为蝎子?让我们来看看你的例子吧。 我手工绘制了邻接矩阵和图形。我希望它不难理解。
现在该如何解决?您可以在此计算每个节点的度数。您可以在此处从邻接矩阵计算它。 (度数表示一个节点连接的节点数量,例如,对于我绘制的图形,1的度数为1,0的度数为2,依此类推......)
首先,您可以在此找到所有节点的度数(节点表示顶点,反之亦然)。
所以,刺痛应该是一度的。现在有一个问题,我会回到它。但是现在让我们不要考虑它。
尾巴将是2级。它将与刺痛相关联。所以,你发现一个节点与sting连接,你就完成了。那是尾巴。
与尾部相连的节点(除了刺痛)是身体。
身体的度数> = 2.因此,如果有一个具有那么大程度的顶点,那么这就是身体的肯定。与之相关的节点就是脚。
现在你可能会说,脚步是2度,所以为什么不是尾巴?因为它们没有连接到sting。(你之前计算过的)
你也可以说,脚趾的度数为1,为什么不刺?因为它连接到某个程度为&gt;的节点2,不能(如尾部有2度)
现在这一切都很好,但考虑一个问题,如果图表是这样的,
1-0-3-4
我希望你明白我所说的。
根据需要澄清图片 你说,哪里有一个+有一个优势。注意第0行上的+ 1和3.因此,0连接到1和4.我就像那样连接它们。并且连接是双向的。你可以从邻接矩阵中看到它。