C#Vertex Edges

时间:2016-02-22 19:12:04

标签: c# algorithm matrix graph adjacency-matrix

我在完成这项任务时遇到了问题: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);
            }
        }

    }

1 个答案:

答案 0 :(得分:2)

所以,我告诉你如何解决这个问题。我从this获得了帮助。你应该看看那里。该网站有一个提示。

我的方法与他们的方法略有不同。

从抽象的角度来看,你要从邻接矩阵中确定给定的点是否像这个图像(也就是蝎子)。 (取自该网站)

enter image description here

现在,邻接矩阵如何转换为蝎子?让我们来看看你的例子吧。 我手工绘制了邻接矩阵和图形。我希望它不难理解。

enter image description here

现在该如何解决?您可以在此计算每个节点的度数。您可以在此处从邻接矩阵计算它。 (度数表示一个节点连接的节点数量,例如,对于我绘制的图形,1的度数为1,0的度数为2,依此类推......)

首先,您可以在此找到所有节点的度数(节点表示顶点,反之亦然)。

所以,刺痛应该是一度的。现在有一个问题,我会回到它。但是现在让我们不要考虑它。

尾巴将是2级。它将与刺痛相关联。所以,你发现一个节点与sting连接,你就完成了。那是尾巴。

与尾部相连的节点(除了刺痛)是身体。

身体的度数> = 2.因此,如果有一个具有那么大程度的顶点,那么这就是身体的肯定。与之相关的节点就是脚。

现在你可能会说,脚步是2度,所以为什么不是尾巴?因为它们没有连接到sting。(你之前计算过的)

你也可以说,脚趾的度数为1,为什么不刺?因为它连接到某个程度为&gt;的节点2,不能(如尾部有2度)

现在这一切都很好,但考虑一个问题,如果图表是这样的,

1-0-3-4

那么什么是刺痛和什么是脚?我的回答是两个。 1和4都可以是腿或刺。

我希望你明白我所说的。

根据需要澄清图片 你说,哪里有一个+有一个优势。注意第0行上的+ 1和3.因此,0连接到1和4.我就像那样连接它们。并且连接是双向的。你可以从邻接矩阵中看到它。