1、今日遇到问题:为什么定义了vector<int> e[N]的一维数组之后,也可以使用if(visitd[e[x][i]]==0)这样的二维数组而不会报错,而当我定义了一个vector<int> e[n][n] 使用e[i]会报错呢
在C++中,vector<int> e[N]
定义了一个大小为 N
的 vector<int>
数组,每个元素都是一个 vector<int>
类型的向量。当使用 e[x][i]
时,e[x]
表示访问 e
数组的第 x
个元素,然后再通过 [i]
访问该元素中的第 i
个元素,这样可以实现二维数组的效果。
在这种情况下,e[x][i]
实际上是访问了 e
数组中第 x
个元素的第 i
个元素,因此可以正常运行而不会报错。
然而,当您定义 vector<int> e[n][n]
时,这实际上是一个大小为 n
的二维 vector<int>
数组,每个元素都是一个 vector<int>
类型的向量。因此,e[i]
表示访问 e
数组的第 i
行,但由于每行都是一个 vector<int>
类型的向量,所以不能直接用 e[i]
来访问该行的元素,这会导致编译错误。
如果您想访问二维 vector<int>
数组中的元素,应该使用 e[i][j]
的方式,其中 i
表示行,j
表示列,这样才能正确访问二维数组中的元素。
2、bfs的定义queue必须是在bfs模块之中进行定义,不能进行全局定义,卡了好久,我真是小菜鸡