簡體   English   中英

Function 檢查兩個圖是否互補

[英]Function to check if two graphs are complements

我正在嘗試編寫一個 function 它將兩個圖作為參數,如果它們是補碼則返回 true,否則返回 false。 我認為如果一個圖形的倒數與另一個匹配,那是我嘗試使用的方法。 我在 class 上構建了我的 function,由於某種原因,它只是不允許我從主 function 調用它。 我什至無法檢查我的 function 是否有效。 我嘗試更改名稱和引用,但我總是收到一條消息:使用未聲明的標識符“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的成員 function ,因此您需要使用 object g中的點運算符調用它。

cout<< g.is_complement(g,g1) << "\n"; 應該管用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM