for和while有什么区别?求大佬解答

P1119 灾后重建

Orz
by liu006 @ 2023-07-16 11:09:29


你的第二个代码似乎CE了,j没定义
by lovely_fcukh @ 2023-07-16 11:16:15


这也A不了啊,CE了
by define_itn_int @ 2023-07-16 11:18:38


```cpp #include<iostream> #include<cstdio> #include<cstring> using namespace std; long long n,m,timex[205],road[205][205],q,x[50005],y[50005],t[50005],tx,ty,fo[205][205],t_n,v_num[50005]; bool v[205]; int main(){ memset(fo,0x3f3f3f3f,sizeof(fo)); scanf("%lld%lld",&n,&m); for(long long i=0;i<n;i++){ scanf("%lld",&timex[i]); fo[i][i]=0; } for(long long i=0;i<m;i++){ scanf("%lld%lld",&tx,&ty); scanf("%lld",&fo[tx][ty]); fo[ty][tx]=fo[tx][ty]; } scanf("%lld",&q); for(long long i=0;i<q;i++){ scanf("%lld%lld%lld",&x[i],&y[i],&t[i]); } int j=0; for(long long i=0;i<q;i++){ while(timex[j]<=t[i]&&j<n){ for(long long k=0;k<n;k++){ for(long long l=0;l<n;l++){ if(fo[k][l]>fo[k][j]+fo[j][l]){ fo[k][l]=fo[k][j]+fo[j][l]; } } } j++; } if(timex[x[i]]>t[i]||timex[y[i]]>t[i]||fo[x[i]][y[i]]>=0x3f3f3f3f) printf("-1\n"); else printf("%lld\n",fo[x[i]][y[i]]); } return 0; } ``` 这才是AC代码
by liu006 @ 2023-07-16 11:20:05


不好意思 Orz
by liu006 @ 2023-07-16 11:20:26


for可以控制范围,while需要条件
by gladex @ 2023-07-16 11:22:18


**for要知道起终点;但while只需要知道条件,只有在满足条件的时候才执行**
by shb20111113 @ 2023-07-16 11:35:20


你仔细看看代码,for语句中每次你都把下标重设为了0,while却没有。我帮你改了一下第一个代码,现在能A了 ``` #include<iostream> #include<cstdio> #include<cstring> using namespace std; long long n,m,timex[205],road[205][205],q,x[50005],y[50005],t[50005],tx,ty,fo[205][205],t_n,v_num[50005]; bool v[205]; int main(){ memset(fo,0x3f3f3f3f,sizeof(fo)); scanf("%lld%lld",&n,&m); for(long long i=0;i<n;i++){ scanf("%lld",&timex[i]); fo[i][i]=0; } for(long long i=0;i<m;i++){ scanf("%lld%lld",&tx,&ty); scanf("%lld",&fo[tx][ty]); fo[ty][tx]=fo[tx][ty]; } scanf("%lld",&q); for(long long i=0;i<q;i++){ scanf("%lld%lld%lld",&x[i],&y[i],&t[i]); } int j=0; for(long long i=0;i<q;i++){ for(;timex[j]<=t[i]&&j<n;j++){ for(long long k=0;k<n;k++){ for(long long l=0;l<n;l++){ if(fo[k][l]>fo[k][j]+fo[j][l]){ fo[k][l]=fo[k][j]+fo[j][l]; } } } } if(timex[x[i]]>t[i]||timex[y[i]]>t[i]||fo[x[i]][y[i]]>=0x3f3f3f3f) printf("-1\n"); else printf("%lld\n",fo[x[i]][y[i]]); } return 0; } ```
by lovely_fcukh @ 2023-07-16 11:39:00


@[liu006](/user/691247) (看楼上)
by y_kx_b @ 2023-08-05 10:05:59


谢谢julao们,此贴结
by liu006 @ 2023-08-08 17:28:50


|