我需要将我的数组样式的邻接矩阵转换为矢量样式(使其看起来更好)
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<std::vector<int>>
,您可以执行以下操作:
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::vectorstd::vector
的文档或者你用来学习C++的任何资料吗?
图形 = 矢量以上是关于我需要将我的数组样式的邻接矩阵转换为矢量样式(使其看起来更好)的主要内容,如果未能解决你的问题,请参考以下文章