C# 顶点边

C# Vertex Edges

我在完成这个任务时遇到了问题:如果一个 n-vertex 图有一个顶点 1(毒刺)连接到一个顶点 2(尾巴)连接一个顶点 3(body) 连接到其他顶点(脚)。一些脚可以连接到其他脚。设计一种算法,判断给定的图画是否代表蝎子,并判断哪条线是 sting、tail、body 和 feets。 这是我要读取的数据文件: (+) is where is edge and (-) where are no edges

我想先找到刺,但基本上我如何才能搜索与尾巴和 body 的联系? 我还必须使用递归 编辑: 好的,现在我已经找到了每行中有多少个“+”:

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);
            }
        }

    }

所以,我给你一个关于如何解决这个问题的想法。我从 this 那里得到了帮助。你应该去那里看看。该网站上有提示。

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

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

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

现在怎么解决呢?您在这里计算每个节点的度数。您可以在此处从邻接矩阵计算它。 (度是指一个节点连接的节点数,比如我画的图,1的度是1,0的度是2等等...)

首先你在这里找到所有节点的度数(节点表示顶点,反之亦然)。

所以,刺应该是一级的。现在有这个问题,我会回来的。不过暂且不考虑。

尾巴的度数为2。它与刺相连。所以,你找到一个与 sting 连接的节点,你就完成了。那就是尾巴。

与tail相连的节点(除了sting)就是body

物体的度数 >= 2。所以如果有一个顶点的度数那么大,那肯定是物体。而与之相连的节点就是脚

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

你也可能会说,脚都是1度的,为什么不刺痛呢?因为它连接到某个度数 > 2 的节点,这不可能(因为尾部的度数为 2)

这样就好了,但是考虑一个问题,如果图形是这样的,

1-0-3-4

那么刺是什么,脚是什么?我的回答是两者兼而有之。 1 和 4 都可以是 leg 或 sting.

希望你明白我说的。

如有需要,请在图片上进行说明: 你说,有+的地方就有优势。注意第 0 行的 1 和 3 上的 +。因此,0 连接到 1 和 4。我已经像这样连接了它们。而且连接是双向的。你可以从邻接矩阵看到。