C++ Can';t在VS2015上绘制路径,但代码在VS2010上运行良好
我用的是内特·罗宾斯。我一直在使用VS2015和VS2010替代系统进行开发。我在5个节点上创建了Dijkestra的模拟,最终输出是从源节点到目标节点的最短路径,以红色虚线打印 然而,经过几次更改后,代码根本无法在VS2015上打印虚线 同样的代码在VS2010上完美地工作 屏幕截图 Visual Studio 2015 VisualStudio2010 代码:-C++ Can';t在VS2015上绘制路径,但代码在VS2010上运行良好,c++,visual-studio-2010,opengl,visual-studio-2015,glut,C++,Visual Studio 2010,Opengl,Visual Studio 2015,Glut,我用的是内特·罗宾斯。我一直在使用VS2015和VS2010替代系统进行开发。我在5个节点上创建了Dijkestra的模拟,最终输出是从源节点到目标节点的最短路径,以红色虚线打印 然而,经过几次更改后,代码根本无法在VS2015上打印虚线 同样的代码在VS2010上完美地工作 屏幕截图 Visual Studio 2015 VisualStudio2010 代码:- void dijkstra(int s) { int i, k, mini; int visited[GRAP
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();
}
void dijkstra(int s){
inti,k,mini;
int访问[图形化];
对于(i=1;我也更改了框的颜色(黄色->绿色)。另外:您是否在同一台机器上执行这两个版本?否则,GPU/OS配置/任何东西也可能有问题。将代码剥离到相关部分也很好。目前代码非常长,很难确定虚线的绘制位置。是的,昨天我在同一台机器上安装了VS2010…我不知道为什么在VS2015中框没有改变颜色。我在两个VS版本上运行相同的代码。为什么结果会根据IDE版本而变化…函数1-5使用绿色glColor3f(0.0,1.0,0.0);
所以我认为这不是编译器的问题。还有glColor3f(0.0,0.0,0.0)
重置颜色(为什么您可能看不到连接线)。然后调用drawString
函数。这里可能有问题。