我在算法中有一个赋值,并且必须为问题编写一个伪代码,就像给定的一组n个在一些配置中彼此重叠的棍子一样。一个类的Stick有一个方法,对于Sticks a和b,a.on(b)在 a 停留在 b 上时返回true。如果它上面没有棍子就可以挑选一根棍子..我已经写了下面的伪代码,因为如果我正在写它就可以告诉任何人....
Begin
For each stick s(v)
Construct a vertex v for Graph G;
End For
if a.on(b)
Return True;
Else
Return False;
End If
TopologicalSort(G);
If cycle is found by TopologicalSort
Return No;
Else
Return the order of each stick produced by TopologicalSort;
End If
End
该算法的运行时间为O(n)时间
答案 0 :(得分:0)
首先在[]下面形成一个数组,其中[i] =坚持否。这是在第i号棒(i = 0到N-1)之下
for ( int i = 0; i < N; i++ ) {
int stickBelow = -1;
for ( int j = 0; j < N; j++ )
if ( i.on( j ) {
stickBelow = j;
break;
}
below[i] = stickBelow;
}
现在迭代这个数组,并继续选择下面[i]是当前棒上的棒。
int topStick = -1;
for ( int i = 0; i < N; i++ ) {
for ( int j = 0; j < N; j++ ) {
if ( below[j] == topStick ) {
Choose the stick j;
topStick = j;
break;
}
}
}
上述算法的复杂度为O(N ^ 2)。