将cocode解决方案转换为c# (Grocery-store, Hydrogenium 2013)

本文关键字:Grocery-store Hydrogenium 2013 cocode 解决方案 转换 | 更新日期: 2023-09-27 18:10:55

为了学习和理解Dijkstra算法如何用于解决"杂货店"([hydrogen 2013]: https://codility.com/programmers/challenges/hydrogenium2013)问题,我试图用c#重写# 2,0 (n^2)解决方案(https://codility.com/media/train/solution-grocery-store.pdf)。

1)这些解决方案是用什么语言写的?

2)与这段代码等价的c#代码是什么?

G = [[]] *N
for i in xrange(M):
    G[A[i]] = G[A[i]] + [(B[i], C[i])]
    G[B[i]] = G[B[i]] + [(A[i], C[i])]

这是我到目前为止写的

        int[] G = new int[N];
        for (int i = 0; i < M; i++)
        {
            G[A[i]] = G[A[i]];
            G[B[i]] = G[B[i]];

        }

提前感谢,格里高利

将cocode解决方案转换为c# (Grocery-store, Hydrogenium 2013)

已下载的IDLE(一个python IDE…算是吧),然后弄明白了。它似乎是在向每个数组元素添加对。如果其他人碰巧遇到同样的问题,下面是我想出的代码。

private struct nodePair
{
  public int node;
  public int time;
  public nodePair(int node, int time)
         {
            this.node = node;
            this.time = time;
         }
 }

 public int solution(int[] A, int[] B, int[] C, int[] D)
 {
    int M = A.Length;
    int N = D.Length;
    //build the graph
    List<nodePair>[] G = new List<nodePair>[N];
    for (int i = 0; i < N; i++)
    {
      G[i] = new List<nodePair>();
    }
    for (int i = 0; i < M; i++)
    {
       G[A[i]].Add(new nodePair(B[i], C[i]));
       G[B[i]].Add(new nodePair(A[i], C[i]));
    }
    //initialize the distance table
    int[] dist = new int[N];
    for (int i = 0; i < N; i++)
    {
       dist[i] = int.MaxValue;
    }

    bool[] visited = new bool[N];
    for (int i = 0; i < N; i++)
    {
       visited[i] = false;
    }
    //look for the minimum value
    int ii = 0; ;
    dist[0] = 0;
    for (int k = 0; k < N; k++)
    {
       int s = int.MaxValue;
       //find the minimum
       for (int j = 0; j < N; j++)
       {
          if ((dist[j] < s) && (visited[j] == false))
          {
             s = dist[j];
             ii = j;
          }
       }
       visited[ii] = true;
       if (s < D[ii])
       {
          return s;
       }

       List<nodePair> thisNodeLIst = G[ii];
       foreach (nodePair oneNode in thisNodeLIst)
       {
           dist[oneNode.node] = Math.Min(dist[oneNode.node], s + oneNode.time);
       }
  }//for
  return -1;
}

}