为什么我不能返回到列表c++

Why I cant push back to list c++

本文关键字:列表 c++ 返回 不能 为什么      更新时间:2023-10-16

我正在编写一个程序,该程序必须生成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)的条件,因此您永远不会真正进入列表。