【发布时间】:2018-02-04 17:17:18
【问题描述】:
我正在制作一个将打印所有路径的控制台应用程序。但是我很难考虑如何显示从源到目的地的所有路径。
这是我的代码:
#include<iostream>
using namespace std;
int arr[8][8] = {{50,30,45,120,0,7,0,0},{30,45,28,4,70,0,0,0},
{50,20,0,38,0,0,0,0},{0,4,30,0,52,0,3,0},{0,75,0,27,0,2,0,3},
{70,0,0,0,2,0,2,0},{0,80,0,73,0,2,0,0},{60,0,90,0,30,0,0,0}};
char vertex[8] = {'A','B','C','D','E','F','G','H'};
void displayPath()
{
system("cls");
int start, end;
char from, to;
cout << "From vertex: ";
cin >> from;
cout << "To: ";
cin >> to;
switch(from)
{
case 'a':case 'A': start = 0; break;
case 'b':case 'B': start = 1; break;
case 'c':case 'C': start = 2; break;
case 'd':case 'D': start = 3; break;
case 'e':case 'E': start = 4; break;
case 'f':case 'F': start = 5; break;
case 'g':case 'G': start = 6; break;
case 'h':case 'H': start = 7; break;
}
switch(to)
{
case 'a':case 'A': end = 0; break;
case 'b':case 'B': end = 1; break;
case 'c':case 'C': end = 2; break;
case 'd':case 'D': end = 3; break;
case 'e':case 'E': end = 4; break;
case 'f':case 'F': end = 5; break;
case 'g':case 'G': end = 6; break;
case 'h':case 'H': end = 7; break;
}
int temp = 0;
int current = start;
if(arr[start][end] > 0)
{
cout << vertex[start] << "->" << vertex[end];
}
else
cout << "No path";
}
void computeDistance()
{
system("cls");
int start,end;
char from, to;
cout << "From vertex: ";
cin >> from;
cout << "To: ";
cin >> to;
switch(from)
{
case 'a':case 'A': start = 0; break;
case 'b':case 'B': start = 1; break;
case 'c':case 'C': start = 2; break;
case 'd':case 'D': start = 3; break;
case 'e':case 'E': start = 4; break;
case 'f':case 'F': start = 5; break;
case 'g':case 'G': start = 6; break;
case 'h':case 'H': start = 7; break;
}
switch(to)
{
case 'a':case 'A': end = 0; break;
case 'b':case 'B': end = 1; break;
case 'c':case 'C': end = 2; break;
case 'd':case 'D': end = 3; break;
case 'e':case 'E': end = 4; break;
case 'f':case 'F': end = 5; break;
case 'g':case 'G': end = 6; break;
case 'h':case 'H': end = 7; break;
}
if(arr[start][end] > 0)
{
cout << arr[start][end] << " meters" << endl;
}
else
cout << "No path";
}
int main()
{
int choice;
cout << "Menu\n\n[1] Display Path\n[2] Compute Distance\n\nChoice: ";
cin >> choice;
switch(choice)
{
case 1: displayPath(); break;
case 2: computeDistance(); break;
}
system("pause");
return 0;
}
此程序仅将源提供给目标,而不是所有通过的顶点。这应该是示例输出:
From: A
To: F
A -> B -> D -> F
另外,它应该遵循最短路径的概念。并将给出总距离。我希望你能帮我解决这个问题。非常感谢您。
【问题讨论】:
标签: c++ data-structures graph dijkstra