矢量堆栈对 |使用 dfs 的树中的最长路径

Vector Stack Pair | Longest path in a tree using dfs

本文关键字:路径 dfs 堆栈 使用      更新时间:2023-10-16
#include <bits/stdc++.h>
using namespace std;
vector <int> adj(10001);
bool vis[10001];
void initialize ()
{
for (int i = 0; i<10001; i++)
vis[i] = false;
}
pair <int,int> dfs ( int x )
{
stack < pair<int,int> > s;
s.push( make_pair (x,0) );
int maxnode = x, maxlevel = 0;
while (!s.empty())
{
int t = s.top().first;
int level = s.top().second;
if (level>maxlevel)
{
maxnode = t;
maxlevel = level;
}
s.pop();
vis[t] = true;
for ( int i = 0; i<adj[t].size(); i++)
{
if ( vis[adj[t][i]]==false)
{
s.push( make_pair (adj[t][i], level+1 ));
} 
}
}
return make_pair (maxnode,maxlevel);
}
int main() {
// your code goes here
int n, x;
cin>>n;
if (n==1 || n==2)
{
cout<<n-1;
exit(0);
}
initialize();
for (int i = 0; i<n-1; i++)
{
int a, b;
cin>>a>>b;
if (i==0)
x = a;
adj[a].push_back(b);
adj[b].push_back(a);
}
pair <int,int> far1 = dfs (x);
initialize();
pair <int,int> far2 = dfs (far1.first);
cout<<far2.second;

return 0;
}

或者代码在这里。

与向量、堆栈、对相关的错误:

prog.cpp: 在函数 'std::p air dfs(int(' 中: prog.cpp:32:29: 错误:在"adj.std::vector<_Tp中请求成员"大小", _Alloc>::operator[]>(((std::vector::size_type(t((',非类类型 '__gnu_cxx::__alloc_traits>::value_type {aka int}' for ( int i = 0; i ^ prog.cpp:34:21:错误:无效类型'__gnu_cxx::__alloc_traits>::value_type {aka int}[int]' 表示数组下标 if ( vis[adj[t][i]]==false( ^ prog
.cpp: 在函数 'int main((' 中: prog.cpp:66:10: error: request for member 'push_back' in 'adj.std::vector<_Tp, _Alloc>::operator[]>((std::vector::size_type(a((',非类类型为'__gnu_cxx::__alloc_traits>:::value_type {aka int}' adj[a].push_back(b(;
^ prog.cpp:67:10:error: request for member 'push_back' in 'adj.std::vector<_Tp, _Alloc>::operator[]>(((std::vector::size_type(b((',其非类类型为'__gnu_cxx::__alloc_traits>::value_type {aka int}' adj[b].push_back(a(;
^

请帮我纠正这些。

已解决: 矢量调整(10001(; 自 矢量调整[10001]; 因为它是 2D 矢量