Как исправить эту ошибку при запуске этого кода DFS? - PullRequest
0 голосов
/ 31 октября 2019

Я написал код для реализации dfs на графике следующим образом:

#include<iostream>
#include<stack>
#include<stdbool.h>
#define MAX 10
using namespace std;
int vertex_id=0;
int graph_id=0;
class vertex{
    public:
    int id;
    int visited;
    int adj[MAX];
    vertex();
};
vertex::vertex()
{
    visited=0;
    id=++vertex_id;
    for(int i=1;i<MAX+1;i++)
    {
        adj[i]=0;
    }
}
class graph:public vertex{
    public:
    stack<vertex> s;
    int g_id;
    vertex* adj_matrix[MAX+1][MAX+1];     //changed here
    void dfs(vertex v);
    void show_dfs(vertex v);
    void add_edge(vertex v1,vertex v2);
    graph();
};
graph::graph(){
    g_id=graph_id++;    //for multiple graphs
    vertex_id=0;
    for(int i=1;i<MAX+1;i++)
    {
        for(int j=1;j<MAX+1;j++)
        {
            adj_matrix[i][j]->id=-1;     //changed here
        }
    }
}
void graph::add_edge(vertex v1,vertex v2){
    v1.adj[v2.id]=1;
    v2.adj[v1.id]=1;
    adj_matrix[v1.id][v2.id]=&v2;     //changed here
    adj_matrix[v2.id][v1.id]=&v1;     //changed here
}
void graph::dfs(vertex v){
    s.push(v);
    v.visited=1;
    int counter=0;
    for(int i=1;i<MAX+1;i++)
    {
        if(adj_matrix[v.id][i]->visited==0 && adj_matrix[v.id][i]->id!=-1)     //changed here
        {
            adj_matrix[v.id][i]->visited=1;     //changed here
            counter=1;  //successfully found adjacent unvisited vertex
            vertex va=*adj_matrix[v.id][i];     //changed here
            dfs(va);
            return;         //once dfs is excecuted, no breadth traversal should follow
        }
    }
    if(!counter){
        show_dfs(v);
        cout<<endl;
        return;
    }
}
void graph::show_dfs(vertex v){
        if(s.empty())
        {
            cout<<"No Paths Found ";
            return;
        }
        while(!s.empty())
        {
            cout<<(s.top()).id<<"<---";
            s.pop();
        }
}
int main()
{
    graph g;
    vertex v1,v2,v3,v4,v5,v6,v7,v8,v9,v10;
    g.add_edge(v1,v2);
    g.add_edge(v1,v3);
    g.add_edge(v1,v5);
    g.add_edge(v3,v4);
    g.add_edge(v3,v2);
    g.add_edge(v2,v8);
    g.add_edge(v8,v9);
    g.add_edge(v9,v10);
    g.add_edge(v5,v7);
    g.add_edge(v5,v6);
    g.add_edge(v6,v7);
    g.dfs(v2);
    //g.show_dfs(v2);
    return 0;
}

Проблема с моим кодом заключается в том, что он компилируется без ошибок, но при запуске возвращает значение мусора. например, график, используемый здесь, производит следующий вывод: пример вывода

Я использовал указатели, чтобы предотвратить ненужное копирование вершин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...