for循环后面的if语句是什么意思?

What does the if-statement after the for-loop mean?

这是 Kattis 的编程挑战之一,我已经解决了它,所以我想看看其他人是如何解决它的。所以我遇到了这段代码,但我无法理解这两行特定的代码:

for(i=0;i<N;i++) if(inTree[i])  

for(j=0;i<N;j++) if(inTree[j]) 

我不明白这些 if 语句在这个算法中是如何工作的。是否应该检查两个节点之间是否存在 link ?这是代码:

#include <stdio.h>
#include <math.h>
#define MAX 105
int N,T;
float x[MAX], y[MAX];

int inTree[MAX];
int main()
{
  int c,i,j;
  float dx,dy;
  int minp;
  float len,min,weigth;
  scanf("%d",&T);
  while(T--)
  {
    scanf("%d",&N);
    for(i=0;i<N;i++)
      inTree[i]=0;
    for(i=0;i<N;i++)
    {
      scanf("%f %f",&x[i],&y[i]);
      /*printf("%d (%f, %f)\n",i+1,x[i],y[i]);*/
    }
    /* Prim's Algorithm */
    c=1;
    inTree[0]=1;
    weigth=0;
    while(c<N)
    {
      min = -1.0;
      for(i=0;i<N;i++) if(inTree[i])
        for(j=0;j<N;j++) if(!inTree[j])
        {
          dx=x[i]-x[j]; dy=y[i]-y[j];
          len=sqrt(dx*dx+dy*dy);
          if(min == -1.0 || len < min)
          {
            min=len;
            minp=j;
          }
        }
      inTree[minp]=1;
      weigth+=min;
      c++;
    }
    printf("%.2f\n",weigth);
    if(T>0)
      printf("\n");
  }
  return 0;
}

for 循环语句采用单个语句作为主体。最常见的是,此语句是用大括号括起来的块,即

for (...) {
    // multiple statements
}

但是,可以使用任何语句,包括 if:

for (...)
    if (...) {
        multiple statements
    }

注意 if 两边没有花括号,因为 for 循环没有控制其他语句。

由于空格不重要,上面的前两行可以合并:

for (...) if (...) {
    multiple statements
}

这是您程序中的结构。