c++ - 在 C++ 中创建一个随机生成的图矩阵
问题描述
所以,我一直在拼命地尝试制作这个随机生成的图矩阵,但我无法让它工作,我不知道为什么,一直出现段错误。这是我的代码:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
const int graph_size = 4;
int main(void)
{
bool** graph;
srand(time(0));
graph = new bool*[graph_size];
for(int i=0; i<graph_size; i++)
{
graph[i] = new bool[graph_size];
for(int j=0; j<graph_size; j++)
{
if(i==j){graph[i][j]=false;}
else{
graph[j][i] = (((rand()%100)/100.0) < 0.19);
graph[i][j] = graph[j][i];
}
cout << graph[i][j];
}
cout << endl;
}
}
解决方案
你的问题是当你做的graph[j][i]
时候j
大于i
。发生这种情况时,您尚未为此索引分配数组,这会触发分段错误。
此外,正如@Jeffrey 所指出的,由于您构造了一个对称矩阵,因此您应该只计算上三角矩阵或下三角矩阵
您可以通过在开头初始化图形并在 i 和 j 上添加条件来修复它:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
const int graph_size = 40;
int main(void)
{
bool **graph;
graph = new bool *[graph_size];
for (int i = 0; i < graph_size; i++)
graph[i] = new bool[graph_size];
srand(time(0));
for (int i = 0; i < graph_size; i++)
{
for (int j = 0; j < graph_size; j++)
{
if (i == j) graph[i][j] = false;
else if (i < j) // limits to upper triangular matrix
{
graph[j][i] = (((rand() % 100) / 100.0) < 0.19);
graph[i][j] = graph[j][i];
}
cout << graph[i][j];
}
cout << endl;
}
}
推荐阅读
- wpf - 如何剪辑我的折线的溢出
- python - 如何根据 spark (pyspark) 上的字典更改列值
- assembly - 我从程序集中调用 pow 函数(c 标准函数)时遇到问题
- python - 在最后确定的元素上使用平滑先验进行信号确定的问题
- r - 在每个代码块之后自动测量执行时间或打印当前时间
- c# - 从 SQL 数据库错误中减少值
- blazor - 未设置 Radzen DataGrid 内的元素引用 (Blazor)
- r - 循环槽矢量元素...并制作新矢量
- python - 使用 Kivy 创建 Python 相机应用程序的问题:[INFO] [Camera] Provider: opencv(['camera_picamera', 'camera_gi'] 已忽略)
- java - Android studio 动态片段根据日期