0

このコードを生成して、ランダムな無向グラフを 100 回テストし、グラフのノードと重みをランダムに生成しました。私の問題は、最小距離を呼び出して最短経路を保存しようとすると、何かがうまくいかず、リストのサイズを返すと常に 1 になることです。何が問題なのですか?

// Random Graph Generator
    for (int n = 1; n <= 101; ++n)
    {
        int r = 0;
        nodeCount = 10;           //rand() % 8128 + 64;

        while (r <= nodeCount)
        {

            ++r;
            int nodeNumb = (rand() % 6); // Generates a possible node from 0 to 6 (seven possiblities) 
            int nodeDest = (rand() % 6); // Generates a possible node destination the same as above

            int node_weight = rand() % 100 + 1; // Generate random weight of node from 1 to 101

                                                // Create adjacency list
            adjacency_list[nodeNumb].push_back(neighbourer(nodeDest, node_weight));
            // For undirected graph create opposite connection back 
            adjacency_list[nodeDest].push_back(neighbourer(nodeNumb, node_weight));
        }

        vector<weight_w> min_distance; // declare vector for minimum distance
        vector<vertex_v> previous; // declare vector to hold previos 

        int origin = 3; // origin to be inputted
        int destination = 5; // destination to be inputted

        list<double> pathCount;
        DijkstraComputePaths(origin, adjacency_list, min_distance, previous);
        pathCount.push_back(min_distance[destination]);

        for (int deleteIterator = 0; deleteIterator <= 6; ++deleteIterator)
        {
            adjacency_list[deleteIterator].clear(); 
        }

        cout << "The List Size is: " << pathCount.size() << endl;

    }
4

1 に答える 1

0

リストに常に 1 つの要素しかない理由はlist<double> pathCount;、外側の for ループの本体内にあるためです。

これは、繰り返しのたびに古いリストを破棄し、新しいリストを作成して値を 1 つだけ追加することを意味します。

代わりにpathCount、 for ループの外側に の定義を移動します。これにより、for ループよりもスコープが大きくなります。

もちろん、 、 、の定義が欠落しているためneighbourer() vertex_v、修正後のプログラムの正確性は保証できません。weight_wDisjkstraComputePaths

于 2015-12-20T05:13:25.113 に答える