为什么我不能返回到列表c++
Why I cant push back to list c++
我正在编写一个程序,该程序必须生成hyperCoube,并且必须找到最大流量值。为什么我不能在HyperCoube类中把int推到我的"关系"列表中。例如,我在HyperCoube.AllFlowFinding方法中推送int。
#include <iostream>
#include <list>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <climits>
#include <iomanip>
#include <string>
#include <list>
using namespace std;
class HyperCoube {
int vertex;
int traces;
double ** adjacencyMatrix;
list<int> relations;
public:
HyperCoube(int k) {
this->traces = 0;
this->vertex = (int) pow(2.0, (double) k);
CreateDefaultAdjacencyMatrix();
CreateAdjacencyMatrix();
}
void PrintMatrix() {
for (int i = 0; i<this->vertex; i++) {
for (int j = 0; j<this->vertex; j++) {
cout << this->adjacencyMatrix[i][j] << " ";
}
cout << endl;
}
}
void PrintDagonalMatrix() {
for (int i = 0; i<this->vertex; i++) {
for (int j = 0; j<this->vertex; j++) {
if (this->adjacencyMatrix[i][j] == 2) {
cout << 0 << " ";
} else {
cout << 1 << " ";
}
}
cout << endl;
}
}
void printQuantityTraces() {
cout << this->traces << endl;
}
void AllPathFinding(int startVertex, int exitVertex) {
for (int i = 0; i<this->vertex; i++) {
if (exitVertex != i) {
if (this->adjacencyMatrix[i][startVertex] != 2) {
cout << startVertex << " " << i << endl;
AllPathFinding(i, exitVertex);
}
} else {
if (this->adjacencyMatrix[i][startVertex] != 2) {
this->traces++;
cout << startVertex << "+++" << i << endl;
break;
}
}
}
}
void PrintList() {
list<int>::iterator iter;
for (iter = this->relations.begin(); iter != this->relations.end(); ++iter) {
int rel = *iter;
cout << rel<< "; ";
}
}
/* ~HyperCoube() {
for (int i = 0; i<this->vertex; i++)
delete [] this->adjacencyMatrix[i];
delete [] * this->adjacencyMatrix;
}*/
private:
void AllFlowFinding(int startVertex, int exitVertex) {
for (int i = 0; i<this->vertex; i++) {
if (exitVertex != i) {
if (this->adjacencyMatrix[i][startVertex] != 2) {
cout << startVertex << " " << i << endl;
this->relations.push_back(startVertex);
this->relations.push_back(i);
AllPathFinding(i, exitVertex);
}
} else {
if (this->adjacencyMatrix[i][startVertex] != 2) {
this->traces++;
cout << startVertex << "+++" << i << endl;
this->relations.push_back(startVertex);
this->relations.push_back(i);
break;
}
}
}
}
void CreateDefaultAdjacencyMatrix() {
this->adjacencyMatrix = new double *[this->vertex];
for (int i = 0; i<this->vertex; i++) {
this->adjacencyMatrix[i] = new double [this->vertex];
}
for (int i = 0; i<this->vertex; i++) {
for (int j = 0; j<this->vertex; j++) {
this->adjacencyMatrix[i][j] = 2.0;
}
}
}
void CreateAdjacencyMatrix() {
for (int i = 0; i < this->vertex; i++) {
for (int j = 0; j < i; j++) {
int u = i ^ j;
int k = u - 1;
k |= k >> 1;
k |= k >> 2;
k |= k >> 4;
k |= k >> 8;
k |= k >> 16;
if (k + 1 == u) {
this->adjacencyMatrix[i][j] = rand() / (double) RAND_MAX;
}
}
}
}
};
int main() {
srand(time(NULL));
HyperCoube x(4);
x.PrintDagonalMatrix();
x.AllPathFinding(0, 2);
//x.printQuantityTraces();
x.PrintList();
return 0;
}
当我打印列表的大小时,它总是打印零。
当您调用AllFlowFinding
时,您永远不会进入(this->adjacencyMatrix[i][startVertex] != 2)
的条件,因此您永远不会真正进入列表。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- C++:如何使函数只返回作为列表一部分的字符串
- 概念中的cv限定符需要表达式参数列表
- 下面是我为检测链接列表中的循环而制作的代码
- 建议在运行时将带有类实例的列表从c++导入qml
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在卡萨布兰卡形成编码参数的列表
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题