Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
我实现了hierholzer算法,用两个栈在图中寻找欧拉路径下面是我的实现有一些运行时错误,如果有人能帮忙的话,我会很高兴的

#include<bits/stdc++.h>
using namespace std;


stack<int> result;
stack<int> temp;


class graph
{
int v;
list<int> *adj;
public:
graph(int v)
{
    this->v=v;
    adj=new list<int> [v];
}

~graph()
{
    delete []adj;
}

void add_edge(int u,int v)
{
    adj[u].push_back(v);
    adj[v].push_back(u);

}

void remove_edge(int u, int v);
int start_vertex();
void print_euler_path(int u);
bool allvisited();


};

   int graph::start_vertex()
{
int u=0;
for(int u=0;u<v;u++)
{
    if(adj[u].size() & 1)
    break;


}

return u;
}


bool graph::allvisited()
{
for(int i=0;i<v;i++)
{
    if(adj[i].size()>0)
    {
        list<int>::iterator it;
        for(it=adj[i].begin();it!=adj[i].end();it++)
        {
                if(*it!=-1)
                return false;

        }
    }
}

return true;


}


void graph::remove_edge(int u,int v)
{
list<int>::iterator i;
i=find(adj[u].begin(),adj[u].end(),v);
*i=-1;
i=find(adj[v].begin(),adj[v].end(),u);
*i=-1;

}


void graph::print_euler_path(int u)
{


temp.push(u);
list<int>::iterator i;
int flag=0;

if(allvisited())
return;


for(i=adj[u].begin();i!=adj[u].end();i++)
{
    if(*i!=-1)
    {
        cout<<"S";
        remove_edge(u,*i);
        print_euler_path(*i);

    }
}
if(!temp.empty())
{
        int k=temp.top();
        temp.pop();
        result.push(k);
        if(!temp.empty())
        print_euler_path(temp.top());
}


}


int main()
{

graph g(6);
g.add_edge(0,1);
g.add_edge(1,2);
g.add_edge(2,3);
g.add_edge(3,0);
g.add_edge(5,1);
g.add_edge(5,2);
g.add_edge(4,1);
g.add_edge(4,2);



int u=g.start_vertex();

g.print_euler_path(u);


while(!result.empty())
{
    cout<<result.top()<<" ";
    result.pop();
}
return 0;


}

关于确切的逻辑,您可以参考on-topic

最佳答案

我不认为这些台词符合你的要求:

    remove_edge(u,*i);
    print_euler_path(*i);

关于algorithm - Hierholzer算法找到欧拉路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25569036/

10-09 07:58