哪里错了%%%

P1346 电车

@[linruizhe111](/user/1028442) `memset` 会把 int 每一位变成额定值,你这样用法错了 ```cpp #include <bits/stdc++.h> using namespace std; int f[210][210],n,m,a,b; int main() { cin>>n>>a>>b; memset(f,0x7f,sizeof(f)); for(int i=1;i<=n;i++){ int m; cin>>m; int l; for(int j=1;j<=m;j++){ cin>>l;f[i][l]=1; if(j==1)f[i][l]=0;} f[i][i]=0; } for (int k = 1; k <= n; k ++ ) for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if(i!=j&&j!=k&&i!=k) f[i][j] = min(f[i][j], f[i][k] + f[k][j]); if(f[a][b]==0x7f7f7f7f) cout<<"-1"; else cout<<f[a][b]; return 0;//orz } ``` 我不知道这对不对,反正一眼 `memset` 错
by Carroty_cat @ 2023-08-29 16:31:34


大佬我用循环过了以后不用memset了
by linruizhe111 @ 2023-08-29 18:33:29


memset是赋值字符串
by longzhanshi_ljy @ 2023-08-31 20:28:05


```cpp #include <bits/stdc++.h> using namespace std; int f[210][210],n,m,a,b; int main() { cin>>n>>a>>b; memset(f,0x3f,sizeof(f)); for(int i=1;i<=n;i++){ int m; cin>>m; int l; for(int j=1;j<=m;j++){ cin>>l;f[i][l]=1; if(j==1)f[i][l]=0;} f[i][i]=0; } for (int k = 1; k <= n; k ++ ) for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if(i!=j&&j!=k&&i!=k) f[i][j] = min(f[i][j], f[i][k] + f[k][j]); if(f[a][b]==1061109567) cout<<"-1"; else cout<<f[a][b]; return 0; }
by longzhanshi_ljy @ 2023-08-31 20:32:19


|