最短路径
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<vector> #include<map> using namespace std; void shortest_path(map<char, vector<char>>graph, char s) { vector<char>queue, seen; queue.push_back(s); seen.push_back(s); map <char, char> parent { {s,0} }; char vertex; while (queue.size() > 0) { vertex = queue.front(); queue.erase(queue.begin()); vector <char> nodes = graph[vertex]; for (char w : nodes) { auto ret = find(seen.begin(), seen.end(), w); if (ret == seen.end()) { queue.push_back(w); seen.push_back(w); parent[w] = vertex; } } printf("%c ", vertex); }puts(""); char v = ‘F‘; while (v != 0) { printf("%c ", v); v = parent[v]; }puts(""); } int main(void) { vector<char> a{ ‘B‘, ‘C‘ }; vector<char> b{ ‘A‘, ‘C‘, ‘D‘ }; vector<char> c{ ‘A‘, ‘B‘, ‘D‘,‘E‘ }; vector<char> d{ ‘B‘, ‘C‘, ‘E‘,‘F‘ }; vector<char> e{ ‘C‘, ‘D‘ }; vector<char> f{ ‘D‘ }; map <char, vector<char>> graph { { ‘A‘,a },{ ‘B‘,b },{ ‘C‘,c },{ ‘D‘,d },{ ‘E‘,e },{ ‘F‘,f } }; shortest_path(graph, ‘A‘); system("pause"); return 0; }
原文:https://www.cnblogs.com/asdfknjhu/p/12432059.html