采用拓扑顺序的采摘棍子在彼此顶部休息

时间:2013-10-19 04:13:03

标签: algorithm graph-algorithm pseudocode topological-sort

我在算法中有一个赋值,并且必须为问题编写一个伪代码,就像给定的一组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)时间

1 个答案:

答案 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)。