将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]];
}
提前感谢,格里高利
已下载的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;
}
}