逛动物园
Jack周日去动物园看“猩猩”,为了直达目的地,Jack想根据动物园地图计算从园区入口到“猩猩”馆的最短路径是多长?
输入
5 4
0 7 3 10 15
7 0 5 13 12
3 5 0 5 10
10 13 5 0 11
15 12 10 11 0
输入中第一行第一个数为动物园展览馆总数n(包括0号馆),第二个数为“猩猩”馆的数字编号(入口编号为0号馆)。后面的输入是一个n×n的矩阵,表示动物园地图,其中,矩阵节点之间用一个空格隔开,矩阵节点的值n[i][j]代表i号馆到j号馆的距离,0表示馆间不通或无效路径。
输出
13
样例输入
2 1
0 5
5 0
样例输出
5
分析
图的广度优先搜索遍历
C++代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int minDistance(vector<vector<int>>& dis,const int& end){
vector<vector<bool>> visited;
vector<int> visitVec;
int m = dis.size();
visited.resize(m);
for (int i = 0; i < m; i++){
visited[i].resize(m);
visitVec.push_back(i);
}
return BFS_minDistance(dis, 0, end,visitVec);
}
int BFS_minDistance(vector<vector<int>>& dis, int start, const int& end, vector<int> visitVec){
int minDistance = INT_MAX, distance =0;
if (start == end || visitVec.empty())
return 0;
for (int i = 0; i < visitVec.size(); i++){
vector<int> vec = visitZoo(i, visitVec);
distance = dis[start][visitVec[i]] + BFS_minDistance(dis, visitVec[i], end, vec);
minDistance = min(minDistance, distance);
}
return minDistance;
}
vector<int> visitZoo(int curr, const vector<int>& visitVec){
vector<int> vec;
for (int i = 0; i < visitVec.size(); i++){
if (i != curr)
vec.push_back(visitVec[i]);
}
return vec;
}
};
int main(){
Solution so;
vector<vector<int>> dist = { { 0, 7, 3, 10, 15 }, { 7, 0, 5, 13, 12 }, { 3, 5, 0, 5, 10 }, { 10, 13, 5, 0, 11 }, { 15, 12, 10, 11, 0 } };
vector<vector<int>> dis = { { 0, 5 }, { 5, 0 } };
int end = 1;
cout << so.minDistance(dis, end);
cout << endl;
system("pause");
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lmingyin5/article/details/48136163