Что должен вернуть список функций <Edge>? - PullRequest
0 голосов
/ 13 мая 2011

Теперь я хочу, чтобы для каждого ребра, ведущего от V1 к V2, я хотел установить расстояние (D) V2 от V1.И если D меньше текущего расстояния до V2, то мы хотим установить текущее расстояние V2 на D и установить предшественника V2 на V1.

Я объявил и инициализировал V1 на самое короткое расстояние (которое простоначальная точка) и пометил как выполненное

Вопрос: Как мне объявить V2 и установить его расстояние?

std::list<Edge>* Graph::shortestPath(int fromVertex, int toVertex){
    //initialize distance array set to INFINITY
    //initialize predecceor set to -1
    //initialize  bool done array to false

    std::list<Edge> *listOfEdges = new std::list<Edge>();
    std::list<Edge>::iterator it;
    Edge *edge;

    double *distance = new double [numVertices];
    int *predecessor = new int [numVertices];
    bool *done = new bool [numVertices];

    for(int i =0; i < numVertices; i++){
        distance[i] = INFINITY;
        predecessor[i] = -1;
        done[i] = false;
    }

    distance[fromVertex] = 0;
    predecessor[fromVertex] = UNDEFINED_PREDECESSOR;
    done[fromVertex] = true;


    for(int i =0; i < numVertices; i++){
        if(!done[i] && distance[i] != INFINITY){
            int V1 = getVertexWithSmallestDistanceThatsNotDone(distance, done);//choose smallest distance           
            done[V1] = true;//set vertice to to V1.


            double D = distance[toVertex] + distance[predecessor[toVertex]];
            if(D < distance[toVertex]){
                D = distance[toVertex];
                predecessor[toVertex] = fromVertex;
            }
        }
        return listOfEdges;
    }
}

1 Ответ

0 голосов
/ 13 мая 2011

Вы возвращаете указатель на список std :: list. Обычно вы выделяете память для этого результата в функции

std::list<Edge> *result = new std::list<Edge>();

Тогда вы бы вернули этот указатель

return result

В вашей внешней функции, которая получает этот результат, вам необходимо освободить память, которая была динамически распределена:

std::list<Edge>* edges = graph.shortestPath(1,5);

//work with edges

delete edges;
edges = NULL;//good practice to mark it as "not poiting to anything valid"
...