鉴于这两个声明:
vector<int> list[N];
和
vector<vector<int>> list;
为什么 list[1].push_back(2); 两者都适用?理论上第一个是一维数组,第二个是二维数组。(如果我错了,请纠正我)?但令我惊讶的是,我发现 list[1].push_back(2) 两者都适用。
谁能解释这是怎么发生的?
请解释,问候和感谢
`
#include <cstdio>
#include <vector>
using namespace std;
int main(void) {
vector<int>g[100100];
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=0,a,b;i<m&&2==scanf("%d%d",&a,&b);++i)g[a].push_back(b),g[b].push_back(a);
int s[100100]={0,1},v[100100]={0,1};
for(int u=0;;++u){
int a=s[u];
for(int i=g[a].size();i-->0;){
int b=g[a][i];
if(v[b]){
if(u-v[b]>=k){
printf("%d\n",u-v[b]+1);
for(int j=v[b];j<=u;++j)printf("%d ",s[j]);
return 0;
}
}
else{
s[v[b]=u+1]=b;
break;
}
}
}
}
`
此代码用于查找长度超过“K+1”的循环,这是我正在研究的一个问题..您可以通过示例输入和输出自行检查
input
3 3 2
1 2
2 3
3 1
output
3
1 2 3