【问题标题】:Adjacency Matrix and Adjacency List of connected Graph连通图的邻接矩阵和邻接表
【发布时间】:2021-01-26 09:09:07
【问题描述】:

假设在社交媒体网络中:

N 是 K、P、U、X 的朋友
X 是 N、A、B 和 C 的朋友
U 与 A、B 和 N 是朋友
A 与 P、U 和 X 是朋友
B 是 X 和 U 的朋友
P 与 K、N 和 A 是朋友
K 与 P、N 和 M 是朋友
M 与 C、N 和 K 是朋友

用c++解决以下问题
一种。编写一个函数来打印二维数组中的邻接矩阵,你还必须绘制 最终图
湾。编写一个函数来为每个人打印未连接的朋友列表。
我根据问题的要求解决了问题编号(a)。我不确定问题编号 (b) 的要求是什么。

【问题讨论】:

  • 我认为该函数应该为每个他不认识的用户输出一个列表
  • 同意@RoQuOTriX。例如,N 和 C 或 A 和 K 不是朋友。
  • 在这种情况下,我只需要打印每个节点的非连接节点。对? @RoQuOTriX
  • @Scott 我不知道你是怎么实现的……我只说我从任务中解释出来的东西,换个说法

标签: c++ graph-algorithm adjacency-matrix adjacency-list


【解决方案1】:

问题a和b的解法如下:

#include <iostream>
using namespace std;

class Graph {
    int v;
    int** adj;

public:
    Graph(int v);
    void addEdge(int start, int e);
    void printMatrix();
    void nonConnected(int start);
};

Graph::Graph(int v)
{
    this->v = v;
    adj = new int*[v];
    for (int row = 0; row < v; row++) {
        adj[row] = new int[v];
        for (int column = 0; column < v; column++) {
            adj[row][column] = 0;
        }
    }
}

// Add an edge to the graph
void Graph::addEdge(int i, int j) {
    adj[i][j] = 1;
    adj[j][i] = 1;
}

// Print the Matrix
  void Graph::printMatrix() {
    for (int i = 0; i < v; i++) {
      cout << i << " : ";
      for (int j = 0; j < v; j++)
        cout << adj[i][j] << " ";
      cout << "\n";
    }
  }

  char friends(int n) {
    if(n == 0) {
        return 'N';
    }
    else if(n == 1) {
        return 'X';
    }
    else if(n == 2) {
        return 'U';
    }
    else if(n == 3) {
        return 'A';
    }
    else if(n == 4) {
        return 'B';
    }
    else if(n == 5) {
        return 'P';
    }
    else if(n == 6) {
        return 'K';
    }
    else if(n == 7) {
        return 'M';
    }
    else {
        return 'C';
    }
  }

void Graph::nonConnected(int start)
{

    cout << friends(start) << " is not friends with: " ;

    for (int i = 0; i < v; i++) {

        if (adj[start][i] == 0 and i != start) {
            cout << friends(i) << " ";
        }
    }
    printf("\n");
}

// Driver code
int main()
{
    int v = 9;
    char arr[9] = {'N', 'X', 'U', 'A', 'B', 'P', 'K', 'M', 'C'};

    // Create the graph
    Graph G(v);
    // friends of N
    G.addEdge(0, 1);
    G.addEdge(0, 2);
    G.addEdge(0, 5);
    G.addEdge(0, 6);

    //friends of X
    G.addEdge(1, 0);
    G.addEdge(1, 3);
    G.addEdge(1, 4);
    G.addEdge(1, 8);

    //friends of U
    G.addEdge(2, 0);
    G.addEdge(2, 3);
    G.addEdge(2, 4);

    //friends of A
    G.addEdge(3, 1);
    G.addEdge(3, 2);
    G.addEdge(3, 5);

    //friends of B
    G.addEdge(4, 1);
    G.addEdge(4, 2);

    //friends of P
    G.addEdge(5, 0);
    G.addEdge(5, 3);
    G.addEdge(5, 6);

    //friends of k
    G.addEdge(6, 0);
    G.addEdge(6, 5);
    G.addEdge(6, 7);

    // friends of M
    G.addEdge(7, 0);
    G.addEdge(7, 6);
    G.addEdge(7, 8);

    // friends of C
    G.addEdge(8, 1);
    G.addEdge(8, 6);

    G.printMatrix();

    G.nonConnected(0);
    G.nonConnected(1);
    G.nonConnected(2);
    G.nonConnected(3);
    G.nonConnected(4);
    G.nonConnected(5);
    G.nonConnected(6);
    G.nonConnected(7);
    G.nonConnected(8);
}

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2018-06-07
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多