当前位置: 首页 > 知识库问答 >
问题:

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

柴禄
2023-03-14
#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;
}

或者代码在这里。

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

程序.cpp: 在函数“标准::p航空 dfs(int)”中: 过程.cpp:32:29: 错误: 请求在 “adj.std::向量中的成员 ”大小”

请帮我纠正这些。

共有1个答案

胡景澄
2023-03-14

求解:矢量adj(10001);到矢量adj[10001];因为它是二维矢量

 类似资料:
  • 我试图找到一种实现DFS搜索的方法,通过使用堆栈,而不是使用递归,在表示为邻接列表的有向图上找到从给定节点开始的最长路径的长度。具体地说,我希望实现DFS搜索,以便在运行时,如下图所示填充堆栈。。 如果这还不清楚的话,这段视频是我希望在程序运行时如何构建堆栈的(DFS大约在12:45开始:https://www.youtube.com/watch?v=pcKY4hjDrxk 但我正在努力找到一种方

  • 我很难找到使用递归函数查找搜索二叉树的最长路径的代码。 bst_node是搜索二叉树的节点。 退出递归的条件非常简单: 在进行递归之前,打印节点的值: 如果假设深度x处的节点只有一个左子节点,那么最长路径穿过节点的左子节点,通过使用递归,我们可以这样写: 如果深度x处的节点只有右子节点,则最长路径穿过节点的右子节点,通过使用递归,我们可以像这样编写它 但是,如果节点同时具有左子项和右子项怎么办?我

  • 你有一辆2005年本田雅阁,油箱里还剩50英里(最大重量)。在50英里半径范围内,你可以访问哪些麦当劳的位置(图节点)?这是我的问题。 如果你有一个加权有向无环图,你如何找到在给定的权限制内可以访问的所有节点? 我知道Dijkstra的算法,但我似乎找不到任何关于它在最小路径问题之外的用途的文档。在我的例子中,我们没有特别想结束的节点,我们只想在不超过最大权重的情况下尽可能多地结束。似乎您应该能够

  • 我遇到了一个问题,我必须找出给定图形中的最长路径。我有一个边列表(例如,{AB,BC}),它表明在顶点/节点(A,B,C)之间有一条边。现在我想计算出可能的最长路径(不重复顶点),这样它可以覆盖从任何顶点/节点开始的最大节点。 解决这个问题的最佳方法是什么?我必须把它作为一个计划来实施。 我在谷歌上查找最小生成树、Dijkstra的算法等等。但我想不出什么最适合解决这个问题。 任何帮助或阅读参考资

  • 有没有人看到上述算法存在缺陷?我不是图论方面的专家,但我认为我对递归和迭代有很好的把握,我相信这也是一样的。我想让它在功能上与递归算法等价。它应该维护第一个算法的所有属性,即使不需要这些属性。 当我开始写它的时候,我并不认为我会有三个循环,但结果就是这样。当我环顾谷歌时,我看到了其他的迭代算法,它们只有一个双重嵌套的循环,然而,它们似乎不是从多个来源出发的。(即他们不会发现不连通图的每一个顶点)

  • 我需要找到图中最长的路径基于边权值。对于图像上的图,它应该是4,5,3,2,1(顺序无关紧要),最好的算法是什么?如果您知道,在您的图中,每个节点都有一个对图中任何其他节点的引用(边)。算法应该改变吗?