布尔Java程序,检查我的图形中的k-clique是否为“W”

时间:2015-12-02 20:09:13

标签: java backtracking

我正在使用回溯算法编写一个程序来检查我的图表中是否有k-clique WW是一个2D数组)。

k-clique意味着在我的图W中存在k-顶点,使得每个顶点连接(形成边)到所有其他(k-1)顶点。例如,如果有一个边缘,我们说v1,v2和v3形成3-clique:

  • v1v2
  • v1v3
  • v1v4
  • v2v3
  • v2v4
  • v3v4

即如果v1v2W[v1][v2] == 1之间存在边缘。

boolean haskclique(int n, int k, int [][] W){
            int[] kVertices = new int [k + 1];
            return haskcliqueRec(n, k, 0, kVertices, W);        
        }

public static boolean 
haskcliqueRec(int n, int k, int i, int [] kVertices, int W[][]){
              boolean hasKclique = true;

              if (i == k) {
                    //check if kCLique
                    for ( int x = 1; x <= k; x++){
                        int y = x + 1;
                        while (hasKclique && y <= k){
                            if( W[ kVertices[x] ][ kVertices[y] ] != 1 )
                                hasKclique = false;

                            if ( y == k && hasKclique)
                                return true;
                            y++;
                        }   
                    }
              }
              else{
                  for (kVertices[1] = W[1][1]; kVertices[1] <= k; kVertices[1]++)  
                   {
                      kVertices[i+1] = W[1][1];

                      //Check if there is a repeat
                      if( kVertices[i+1] != kVertices[i] )
                          haskcliqueRec(n, k, i+1, kVertices, W);
                   }
              }
              return false;
          }

当我的方法返回true时,我收到false。为什么呢?

0 个答案:

没有答案