检查两个图是否互补的函数

Function to check if two graphs are complements

我正在尝试编写一个函数,它将两个图形作为参数,return 如果它们是互补的,则为真,否则为假。我认为如果一个图的倒数与另一个图相匹配,那么图就是互补的,这是我尝试使用的方法。我在 class 上构建了我的函数,出于某种原因,它不允许我从主函数调用它。我什至无法检查我的功能是否有效。我尝试更改名称和引用,但我总是收到一条消息: 使用未声明的标识符 'is_complement'.

这是我的代码:

#include <iostream>
#include <list>

using namespace std;

class Graph
{
    int num_of_vertices;
    list<int> *adj;
    void DFSrecursive (int n, bool visited[]);



public:
    Graph(int numm_of_vertices);
    void addEdge(int n, int m);
    Graph ReverseGraph();
    bool is_complement(Graph g1, Graph g2);

};

int main()
{
    //Test graph 1
    Graph g(4);
    g.addEdge(0, 1);
    g.addEdge(1, 2);
    g.addEdge(2, 3);
    g.addEdge(0, 2);

    //Test graph 2
    Graph g1(4);
    g1.addEdge(0, 1);
    g1.addEdge(1, 2);
    g1.addEdge(2, 3);
    g1.addEdge(0, 2);


    cout<< is_complement(g,g1) <"\n";

    return 0;
}

Graph::Graph(int V)
{
    this->num_of_vertices = V;
    adj = new list<int>[V];
}

void Graph::addEdge(int n, int m)
{
    adj[n].push_back(m);
    adj[m].push_back(n);
}


bool Graph::is_complement(Graph g1, Graph g2)
{
    Graph ga=g1;
    Graph gr=g2;
    bool flag=false;

    gr = ReverseGraph();

    for (int i=0; i<num_of_vertices; i++)
   {
       if (ga.adj[i]==gr.adj[i])
       {
           cout<<"Complement";
           flag=true;
       }
        else
            flag=false;
   }
    return flag;
}

//helping functions

void Graph::DFSrecursive (int n, bool visited[])
{
    visited[n] = true;
    list<int>::iterator i;
    for (i = adj[n].begin(); i != adj[n].end(); ++i)
        if (!visited[*i])
            DFSrecursive(*i, visited);
}

Graph Graph::ReverseGraph()
{
    Graph g(num_of_vertices);
    for (int v = 0; v < num_of_vertices; v++)
    {
        list<int>::iterator i;
        for(i = adj[v].begin(); i != adj[v].end(); ++i)
        {
            g.adj[*i].push_back(v);
        }
    }
    return g;
}

由于 is_complement 是 class Graph 的成员函数,您需要使用对象 g 中的点运算符调用它。

cout<< g.is_complement(g,g1) << "\n"; 应该可以。