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
}
这是您程序中的结构。
这是 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
}
这是您程序中的结构。