首先說明,這里的最短路是指經過的城市最少
代碼如下:
/*廣度優先遍歷的應用:在城市地圖中求一條一個城市到另一個城市的經過最少城市的路徑
*/
#include<iostream>
using namespace std;
#define N 10
int cityMap[N][N] = {{0}, {0, 0, 1, 1, 1, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 1}, {0, 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 1, 0}};
char cityName[N] = {'#', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};// 頂點
int visited[N] = {0};// 標記圖中元素的訪問狀態void getPath(int k);
void outputShortestPath(int des);
int pre[N]; int main() {cout << "B到G的最短路徑為:" << endl;getPath(2);return 0;
}void getPath(int k) {int queue[N];pre[k] = -1;int front = 0, rear = 0;visited[k] = 1;
// cout << cityName[k] << " ";queue[rear++] = k;while (front != rear) {int data = queue[front++];for (int i = 1; i <= 8; i++) {if (cityMap[data][i] == 1 && visited[i] == 0) {
// cout << cityName[i] << " ";pre[i] = data;if (cityName[i] == 'G') {outputShortestPath(i);// 輸出最短路徑 return ;}queue[rear++] = i;visited[i] = 1;} }}
}void outputShortestPath(int des) {if (des == -1)return ;outputShortestPath(pre[des]);cout << cityName[des] << " ";
}
總結
以上是生活随笔為你收集整理的利用图的广度优先遍历解决城市最短路径问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。