@[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