Не удается нарисовать путь на VS2015, но код работает на VS2010 - PullRequest
0 голосов
/ 11 мая 2018

Я использую GLUT Нейта Робинса для Win 32 . Я использую VS2015 и VS2010 на альтернативных системах для разработки. Я создал симуляцию Дейкестры на 5 узлах, и окончательный результат - это кратчайший путь от исходного узла до узла назначения, напечатанного красными пунктирными линиями.

Однако после нескольких изменений код просто не будет печатать пунктирные линии на VS2015.

Тот же код работает на VS2010 без нареканий.

Скриншоты

Visual Studio 2015 VS15

Visual Studio 2010 VS10

Код : -

void dijkstra(int s) {
    int i, k, mini;
    int visited[GRAPHSIZE];

    for (i = 1; i <= n; ++i) {
        d[i] = INFINITY;
        prev[i] = -1;
        visited[i] = 0;
        dummypath[i] = -1;
    }

    d[s] = 0;

    for (k = 1; k <= n; ++k) {
        mini = -1;
        for (i = 1; i <= n; ++i)
            if (!visited[i] && ((mini == -1) || (d[i] < d[mini])))
                mini = i;

        visited[mini] = 1;

        for (i = 1; i <= n; ++i)
            if (dist[mini][i]) {
                if (d[mini] + dist[mini][i] < d[i]) {
                    d[i] = d[mini] + dist[mini][i];
                    prev[i] = mini;
                }
            }
    }
}

void callPath(int a, int b) {

    std::cout << "Source :" << a << std::endl << "Dest :" << b << std::endl;
    int i, j, k;
    int u, v, w, dest, src;
    for (i = 0;i<GRAPHSIZE;i++) {
        getPath[i] = '\0';
        path[i] = '\0';

    }
    src = a;
    dest = b;

    dijkstra(src);

    destpath(dest);

    k = 0;
    std::cout << "Path" << std::endl;
    while (path[k] != '\0') {
        getPath[k] = path[k];
        std::cout << getPath[k] << std::endl;
        k++;
    }
}

void display4() {

    if (a == b) {
        if (a == 1) {
            getFinalCube1();
            glColor3f(0.0, 0.0, 1.0);
            drawString(10, 295, 0, "Source");
            drawString(10, 210, 0, "Destination");
            glFlush();
        }
        else if (a == 2) {
            getFinalCube2();
            glColor3f(0.0, 0.0, 1.0);
            drawString(110, 460, 0, "Source");
            drawString(110, 375, 0, "Destination");
            glFlush();
        }
        else if (a == 3) {
            getFinalCube3();
            glColor3f(0.0, 0.0, 1.0);
            drawString(285, 460, 0, "Source");
            drawString(285, 375, 0, "Destination");
            glFlush();
        }
        else if (a == 4) {
            getFinalCube4();
            glColor3f(0.0, 0.0, 1.0);
            drawString(110, 130, 0, "Source");
            drawString(110, 45, 0, "Destination");
            glFlush();
        }
        else {
            getFinalCube5();
            glColor3f(0.0, 0.0, 1.0);
            drawString(285, 130, 0, "Source");
            drawString(285, 45, 0, "Destination");
            glFlush();
        }
        glFlush();
    }
    else {
        glColor3f(0.0, 0.0, 1.0);
        if (a == 1)
            drawString(10, 295, 0, "Source");
        else if (a == 2)
            drawString(110, 460, 0, "Source");
        else if (a == 3)
            drawString(285, 460, 0, "Source");
        else if (a == 4)
            drawString(110, 130, 0, "Source");
        else if (a == 5)
            drawString(285, 130, 0, "Source");

        if (b == 1)
            drawString(10, 210, 0, "Destination");
        else if (b == 2)
            drawString(110, 375, 0, "Destination");
        else if (b == 3)
            drawString(285, 375, 0, "Destination");
        else if (b == 4)
            drawString(110, 45, 0, "Destination");
        else if (b == 5)
            drawString(285, 45, 0, "Destination");

        i = 0;
        while (getPath[i + 1] != '\0') {
            if (getPath[i] == 1) {
                getFinalCube1();
                glFlush();
                if (getPath[i + 1] == 2) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 60) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(110 + x, 290 + y, 0);
                        glVertex3f(125 + x, 307.5 + y, 0);
                        glVertex3f(130 + x, 302.5 + y, 0);
                        glVertex3f(115 + x, 285 + y, 0);
                        glVertex3f(110 + x, 290 + y, 0);
                        y = y + 33;
                        x = x + 25;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 100; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube2();
                    glFlush();
                }
                else if (getPath[i + 1] == 3) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 31) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(112.5 + x, 250 + y, 0);
                        glVertex3f(135 + x, 265 + y, 0);
                        glVertex3f(137.5 + x, 260 + y, 0);
                        glVertex3f(115 + x, 245 + y, 0);
                        glVertex3f(112.5 + x, 250 + y, 0);
                        y = y + 25;
                        x = x + 48;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 100; k++) {
                            delay();
                        }
                        glFlush();
                    }

                    getFinalCube3();
                    glFlush();
                }
                else if (getPath[i + 1] == 4) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 60) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(65 + x, 220 + y, 0);
                        glVertex3f(80 + x, 200 + y, 0);
                        glVertex3f(75 + x, 195 + y, 0);
                        glVertex3f(60 + x, 215 + y, 0);
                        glVertex3f(65 + x, 220 + y, 0);
                        y = y - 33;
                        x = x + 25;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube4();
                    glFlush();
                }
                else {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 40) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(95 + x, 210 + y, 0);
                        glVertex3f(117.5 + x, 197.5 + y, 0);
                        glVertex3f(115 + x, 192.5 + y, 0);
                        glVertex3f(92.5 + x, 205 + y, 0);
                        glVertex3f(95 + x, 210 + y, 0);
                        y = y - 32;
                        x = x + 56;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }

                    getFinalCube5();
                    glFlush();
                }
                glFlush();
            }
            else if (getPath[i] == 2) {
                getFinalCube2();
                glFlush();
                if (getPath[i + 1] == 1) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 60) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(120 + x, 375 + y, 0);
                        glVertex3f(125 + x, 370 + y, 0);
                        glVertex3f(110 + x, 350 + y, 0);
                        glVertex3f(105 + x, 355 + y, 0);
                        glVertex3f(120 + x, 375 + y, 0);
                        y = y - 25;
                        x = x - 18;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 100; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube1();
                    glFlush();
                }
                else if (getPath[i + 1] == 3) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 50) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(212.5 + x, 445 + y, 0);
                        glVertex3f(237.5 + x, 445 + y, 0);
                        glVertex3f(237.5 + x, 438 + y, 0);
                        glVertex3f(212.5 + x, 438 + y, 0);
                        glVertex3f(212.5 + x, 445 + y, 0);
                        y = y;
                        x = x + 30;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube3();
                    glFlush();
                }
                else if (getPath[i + 1] == 4) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 35) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(135 + x, 380 + y, 0);
                        glVertex3f(137.5 + x, 355 + y, 0);
                        glVertex3f(142.5 + x, 359 + y, 0);
                        glVertex3f(140 + x, 383.5 + y, 0);
                        glVertex3f(135 + x, 380 + y, 0);
                        y = y - 70;
                        x = x + 5;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube4();

                    glFlush();
                }
                else {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 31) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(182.5 + x, 367.5 + y, 0);
                        glVertex3f(195 + x, 345 + y, 0);
                        glVertex3f(190 + x, 342.5 + y, 0);
                        glVertex3f(177.5 + x, 365 + y, 0);
                        glVertex3f(182.5 + x, 367.5 + y, 0);
                        y = y - 66;
                        x = x + 37;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 100; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube5();
                    glFlush();
                }
                glFlush();
            }
            else if (getPath[i] == 3) {
                getFinalCube3();
                glFlush();
                if (getPath[i + 1] == 1) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 31) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(297.5 + x, 382.5 + y, 0);
                        glVertex3f(275 + x, 372.5 + y, 0);
                        glVertex3f(277.5 + x, 367.5 + y, 0);
                        glVertex3f(300 + x, 377.5 + y, 0);
                        glVertex3f(297.5 + x, 382.5 + y, 0);
                        y = y - 25;
                        x = x - 50;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 100; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube1();
                    glFlush();
                }
                else if (getPath[i + 1] == 2) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 60) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(290 + x, 385 + y, 0);
                        glVertex3f(287.5 + x, 380 + y, 0);
                        glVertex3f(265 + x, 387.5 + y, 0);
                        glVertex3f(267.5 + x, 392.5 + y, 0);
                        glVertex3f(290 + x, 385 + y, 0);
                        y = y + 6.25;
                        x = x - 30;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 100; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube2();
                    glFlush();
                }
                else if (getPath[i + 1] == 4) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 31) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(295 + x, 372.5 + y, 0);
                        glVertex3f(282.5 + x, 350 + y, 0);
                        glVertex3f(287.5 + x, 347.5 + y, 0);
                        glVertex3f(300 + x, 370 + y, 0);
                        glVertex3f(295 + x, 372.5 + y, 0);
                        y = y - 66.25;
                        x = x - 37.5;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 100; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube4();
                    glFlush();
                }
                else {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 35) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(310 + x, 385 + y, 0);
                        glVertex3f(313 + x, 360 + y, 0);
                        glVertex3f(317.5 + x, 362.5 + y, 0);
                        glVertex3f(315 + x, 387.5 + y, 0);
                        glVertex3f(310 + x, 385 + y, 0);
                        y = y - 70;
                        x = x + 5;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube5();

                    glFlush();
                }
                glFlush();
            }
            else if (getPath[i] == 4) {
                getFinalCube4();
                glFlush();
                if (getPath[i + 1] == 1) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 45) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(127.5 + x, 115 + y, 0);
                        glVertex3f(112.5 + x, 135 + y, 0);
                        glVertex3f(107.5 + x, 132.5 + y, 0);
                        glVertex3f(122.5 + x, 112.5 + y, 0);
                        glVertex3f(127.5 + x, 115 + y, 0);
                        y = y + 31.25;
                        x = x - 25;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube1();
                    glFlush();
                }
                else if (getPath[i + 1] == 2) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 35) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(210 + x, 125 + y, 0);
                        glVertex3f(207.5 + x, 155 + y, 0);
                        glVertex3f(212.5 + x, 157.5 + y, 0);
                        glVertex3f(215 + x, 127.5 + y, 0);
                        glVertex3f(210 + x, 125 + y, 0);
                        y = y + 70;
                        x = x - 5;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube2();
                    glFlush();
                }
                else if (getPath[i + 1] == 3) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 22) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(210 + x, 125 + y, 0);
                        glVertex3f(222.5 + x, 145 + y, 0);
                        glVertex3f(226 + x, 138 + y, 0);
                        glVertex3f(215 + x, 120 + y, 0);
                        glVertex3f(210 + x, 125 + y, 0);
                        y = y + 45;
                        x = x + 25;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }

                    getFinalCube3();
                    glFlush();
                }
                else {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 50) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(180 + x, 50 + y, 0);
                        glVertex3f(205 + x, 50 + y, 0);
                        glVertex3f(205 + x, 42.5 + y, 0);
                        glVertex3f(180 + x, 42.5 + y, 0);
                        glVertex3f(180 + x, 50 + y, 0);
                        y = y;
                        x = x + 40;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube5();
                    glFlush();
                }
                glFlush();
            }
            else {
                getFinalCube5();
                glFlush();
                if (getPath[i + 1] == 1) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 30) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(315 + x, 120 + y, 0);
                        glVertex3f(287.5 + x, 132.5 + y, 0);
                        glVertex3f(282.5 + x, 127.5 + y, 0);
                        glVertex3f(310 + x, 115 + y, 0);
                        glVertex3f(315 + x, 120 + y, 0);
                        y = y + 25;
                        x = x - 45;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }

                    getFinalCube1();
                    glFlush();
                }
                else if (getPath[i + 1] == 2) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 30) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(362.5 + x, 130 + y, 0);
                        glVertex3f(350 + x, 150 + y, 0);
                        glVertex3f(345 + x, 147.5 + y, 0);
                        glVertex3f(357.5 + x, 127.5 + y, 0);
                        glVertex3f(362.5 + x, 130 + y, 0);
                        y = y + 60;
                        x = x - 35;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }

                    getFinalCube2();
                    glFlush();
                }
                else if (getPath[i + 1] == 3) {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 35) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(385 + x, 125 + y, 0);
                        glVertex3f(382.5 + x, 155 + y, 0);
                        glVertex3f(387.5 + x, 157.5 + y, 0);
                        glVertex3f(390 + x, 127.5 + y, 0);
                        glVertex3f(385 + x, 125 + y, 0);
                        y = y + 70;
                        x = x - 5;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }
                    getFinalCube3();
                    glFlush();
                }
                else {
                    x = 0;
                    y = 0;
                    x = m[i][i + 1] * y;
                    for (j = 0; j < 125; j = j + 60) {
                        glBegin(GL_POLYGON);
                        glColor3f(1.0, 0.0, 0.0);
                        glVertex3f(295 + x, 95 + y, 0);
                        glVertex3f(270 + x, 90 + y, 0);
                        glVertex3f(272.5 + x, 85 + y, 0);
                        glVertex3f(297.5 + x, 90 + y, 0);
                        glVertex3f(295 + x, 95 + y, 0);
                        y = y - 5;
                        x = x - 35;

                        glFlush();
                        glEnd();
                        for (k = 0; k <= 300; k++) {
                            delay();
                        }
                        glFlush();
                    }

                    getFinalCube4();
                    glFlush();
                }
                glFlush();
            }
            i++;
            glFlush();
        }
    }
    glFlush();
}

Полный код доступен здесь .

Я действительно не понимаю, почему код не работает на VS2015, но отлично работает с VS2010. Любая помощь приветствуется, так как я использую VS2010 на своем рабочем столе и, следовательно, нести ее везде не представляется возможным.

...