当前位置: 首页>>代码示例>>C++>>正文


C++ Path::Set方法代码示例

本文整理汇总了C++中Path::Set方法的典型用法代码示例。如果您正苦于以下问题:C++ Path::Set方法的具体用法?C++ Path::Set怎么用?C++ Path::Set使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Path的用法示例。


在下文中一共展示了Path::Set方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Coordinator

// Implementacion el proceso administrador
void Coordinator()
{
    // Permite guardar el estado.
    MPI_Status status;
    // Permite almacenar el mensaje a ser intercambiado.
    Message message;

    // Permite mantener registro de todos los procesos esperando por una ruta.
    int* waiting = new int[NumberOfProcesses];
    // Permite almacenar la cantidad de procesos esperando.
    int numberOfWaitingProcesses = 0;
    // Cuenta el número de mejores rutas recibidas.
    int numberOfBestPath = 0;

    // Permite almacenar la ruta más corta encontrada hasta ahora.
    Path Shortest;
    // Permite almacenar las tareas a ser asignadas en una cola.
    List queue;
    // Instanciamos una nueva ruta.
    Path *P = new Path;
    // Inserta la primera ruta, la de largo 0.
    queue.Insert(P, 0);

    // La ruta inicial debe ser mala.
    Shortest.length = INT_MAX;
    // Mientras los procesos que esperan por asignacion de algun ruta sean menores a la cantidad total menos 1
    while (numberOfWaitingProcesses < NumberOfProcesses - 1)
    {
        // Se reciben los mensajes enviados por los trabajadores
        MPI_Recv (&message, MessageSize, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);

        // Se revisa el status
        switch (status.MPI_TAG)
        {
        // Si es una ruta mejor la que se envia
        case BestPathTag:
            // Si el largo de la ruta es menor que el de la menor encontrada hasta ahora
            if (message.length < Shortest.length)
            {
                numberOfBestPath++;
                printf("Mejor Ruta encontrada %d, origen = %d, largo = %d\n",
                       numberOfBestPath, status.MPI_SOURCE, message.length);

                // actualizar la ruta mas corta
                Shortest.Set(message.length, message.city, NumberOfCities);
                // Le envio la nueva ruta a los trabajadores
                for(int i = 1; i < NumberOfProcesses; i++)
                    MPI_Send(&(Shortest.length), 1, MPI_INT, i, UpdateBestPathTag, MPI_COMM_WORLD );
            }
            break;
        // Si hay que insertar una ruta en la cola de tareas
        case PutPathTag:
            // Si hay procesos esperando por tareas
            if (numberOfWaitingProcesses > 0)
            {
                // no se pone la ruta en la cola, se envia al proceso en espera
                MPI_Send (&message, MessageSize, MPI_INT, waiting[--numberOfWaitingProcesses], ReplyPathTag, MPI_COMM_WORLD);
            }
            else // si no hay procesos en espera de tareas
            {
                // sea crea una nueva ruta
                P = new Path();
                // se configuran sus valores
                P->Set(message.length, message.city, message.visited);
                // se inserta en la cola de tareas
                queue.Insert(P, message.length);
            }
            break;
        // Si hay que asignar una tarea.
        case GetPathTag:
            // si aun hay rutas en la cola de tareas.
            if (!queue.IsEmpty())
            {
                // se obtiene la ruta y se la envia con la mejor longitud
                P = (Path *)queue.Remove(NULL);
                message.length = P->length;
                memcpy(message.city, P->city, MAXCITIES*sizeof(int));
                message.visited = P->visited;
                MPI_Send (&message, MessageSize, MPI_INT, status.MPI_SOURCE, ReplyPathTag, MPI_COMM_WORLD);
                delete P;
            }
            else
            {
                // El proceso que pidio la ruta debe esperar
                waiting[numberOfWaitingProcesses++] = status.MPI_SOURCE;
                if (numberOfWaitingProcesses == NumberOfProcesses - 1)
                    // se les comunica a los demás procesos que se terminó
                    for (int i = 1; i < NumberOfProcesses; i++)
                        MPI_Send (NULL, 0, MPI_INT, i, DoneTag, MPI_COMM_WORLD);
            }
            break;
        }
    }
    // Se imprime la ruta más corta.
    printf("La Ruta Mas Corta Es : \n");
    Shortest.Print();
}
开发者ID:asazorojas,项目名称:TSP,代码行数:98,代码来源:tsp.cpp


注:本文中的Path::Set方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。