我需要将我的数组样式的邻接矩阵转换为矢量样式(使其看起来更好)

Posted

技术标签:

【中文标题】我需要将我的数组样式的邻接矩阵转换为矢量样式(使其看起来更好)【英文标题】:i need to convert my array styled adjacency matrix into vector styled (to make it look better) 【发布时间】:2019-08-01 07:31:14 【问题描述】:

我是图形概念的新手,我只是想通过编写小代码和玩它来学习它。我有一个基于二维数组的邻接矩阵无向图类,我想将其转换为二维向量。

我通过vector<vector<int>> graphed 初始化了一个向量。但我无法在构造函数中修改它,并且 addedge() 函数也行为不端。代码给出逻辑错误并崩溃。显示功能只是二进制矩阵的精美显示。没什么问题

#include<iostream>
#include<vector>
using namespace std;
class my_graph
    public:
        vector<vector<int>> graphed;
        int row=0;
        int col=0;
        my_graph(int size)
            int row=size;
            int col=size;
            // what am i supposed to type here to make the graphed 2d vector
            // size equal to the user provided size.
        
        void add_edge(int i,int j)
            graphed[i][j]=1;//am i supposed to use pushback() function here?
            graphed[j][i]=1; // or is it fine?
        

        void display(int size)
            cout<<" ";
            for(int i=0;i<size;i++)
                cout<<" "<<i;
            
            cout<<"\n";
            cout<<" ";
            for(int i=0;i<2*size;i++)
                cout<<"-";
            
            cout<<"\n";
            for(int i=0;i<size;i++)
                cout<<i<<"|";
                for(int j=0;j<size;j++)
                    cout<<graphed[i][j]<<" ";
                
                cout<<"\n";
            
        
;

int main()
    int v=6;
    my_graph g1(v);
    g1.add_edge(1,2);
    g1.add_edge(1,4);
    g1.add_edge(1,5);
    g1.add_edge(2,5);
    g1.add_edge(2,3);
    g1.add_edge(3,5);
    g1.add_edge(3,0);
    g1.add_edge(5,4);
    g1.add_edge(0,4);
    g1.add_edge(0,3);
    g1.display(v);
    return 0;


my desired output is

  0 1 2 3 4 5
 ------------
0|0 0 0 1 1 0
1|0 0 1 0 1 1
2|0 1 0 1 0 1
3|1 0 1 0 0 1
4|1 1 0 0 0 1
5|0 1 1 1 1 0

thanks for helping.

【问题讨论】:

graphed[row][col]; 你认为这是做什么的?因为它不这样做。 您显示的代码不是“给出逻辑错误和崩溃” - 它运行just fine。如果您在更改代码以使用std::vector 时遇到问题,请显示有问题的代码。 图形[行][列];使用用户提供的大小初始化 2d 数组。现在,为了简单起见,我保持 row 和 col 相同,使其成为方矩阵。我知道我没有使用任何向量,因为我遇到了运行时错误。我需要你将此代码从二维数组转换为 wd 向量 graphed[row][col]; 不会初始化该大小的二维数组。它访问行row 和列col 的元素(与您在display 中所做的完全相同) - 然后忽略该值。我们不会完全重写此程序以供您改用std::vector - 再次,请显示您遇到错误的代码。如果你不向我们展示你做了什么,就不可能告诉你你做错了什么。 除了使用std::vector,你还可以去掉row/col成员(等于graphed.size()),显示也不需要size参数。 【参考方案1】:

要初始化std::vector&lt;std::vector&lt;int&gt;&gt;,您可以执行以下操作:

    my_graph(int size)
        int row=size;
        int col=size;
        graphed = std::vector<std::vector<int>>(size, std::vector<int>(size, 0));
    

这会将graphed 设置为size 向量的向量,每个向量都包含size 零。

通常的做法是使用成员初始化列表:

    my_graph(int size)
      : row(size), col(size),
        graphed = std::vector<std::vector<int>>(size, std::vector<int>(size, 0))
    
    

除此之外,您的代码无需更改即可使用std::vector

https://godbolt.org/z/lYcTnV

【讨论】:

图形 = std::vector(size, std::vector(size, 0));这行代码给了我 [Error] no matching function for call to 'std::vector::vector(int&, std::vector)' @AdnanAhmed 是的,我最初有一个错字,已经更正了。 图形 = std::vector<:vector>>(size, std::vector(size, 0));你能解释一下这行代码吗? @AdnanAhmed 答案中已经解释过了。你能更具体地说明什么让你感到困惑吗?你看过std::vector的文档或者你用来学习C++的任何资料吗? 图形 = 矢量>(size, vector(size, 0));这条线也有效。现在我懂了。实际上我对 'std::' 并不熟悉。

以上是关于我需要将我的数组样式的邻接矩阵转换为矢量样式(使其看起来更好)的主要内容,如果未能解决你的问题,请参考以下文章

将矩阵转换为矢量

从矩阵样式的对象数组创建数组数组

使用PHP将带有样式(css)的html转换为pdf

将 arma::mat 邻接矩阵转换为 C 中的 igraph 图 (Rcpp)

如何构建透视投影矩阵(无 API)

C ++创建一个矢量大小的数组,然后将矢量复制到C样式数组[复制]