
帮我基于以上的数据结构图结构,帮我用C++完整地实现以下的两个代码。
图1 交通网络图
根据图1所示的交通网络,完成以下任务:
代码一、
(1)根据图的稀疏程度选择使用邻接矩阵或者邻接表实现图的存储,并编码实现;
代码二、
(2)选择深度优先遍历或者广度优先遍历算法,编码实现“北京”出发浏览各地的路线图。

帮我基于以上的数据结构图结构,帮我用C++完整地实现以下的两个代码。
图1 交通网络图
根据图1所示的交通网络,完成以下任务:
代码一、
(1)根据图的稀疏程度选择使用邻接矩阵或者邻接表实现图的存储,并编码实现;
代码二、
(2)选择深度优先遍历或者广度优先遍历算法,编码实现“北京”出发浏览各地的路线图。
好了,望采纳:

#include<iostream>
#include<string>
#include<vector>
#include<unordered_map>
using namespace std;
//边
class Edge
{
public:
Edge(string from,string to,int dis):from(from),to(to),dis(dis) {}
string from,to;
int dis;
};
//图
class Graph
{
public:
void print_path(string from);
void dfs(string from,unordered_map<string,bool> &visited,vector<Edge> &path);
//所有顶点名
vector<string> vertex_names;
//某个顶点到其它顶点的边
unordered_map<string,vector<Edge>> edges;
};
void Graph::print_path(string from)
{
unordered_map<string,bool> visited;
vector<Edge> path;
cout<<"从北京出发到各地的路线图如下:"<<endl;
for(string v:vertex_names)
{
visited[v]=false;
}
visited[from]=true;
dfs(from,visited,path);
}
void Graph::dfs(string from,unordered_map<string,bool> &visited,vector<Edge> &path)
{
for(Edge e:edges[from])
{
if(!visited[e.to])
{
path.push_back(e);
cout<<path[0].from;
for(int i=0;i<path.size();i++)
{
cout<<"--"<<path[i].dis<<"--"<<path[i].to;
}
cout<<endl;
visited[e.to]=true;
dfs(e.to,visited,path);
visited[e.to]=false;
path.pop_back();
}
}
}
int main()
{
Graph g;
g.vertex_names={"北京","上海","香港","台北"};
g.edges["北京"]=vector<Edge>({Edge("北京","上海",1463),Edge("北京","香港",2160),Edge("北京","台北",1680)});
g.edges["上海"]=vector<Edge>({Edge("上海","北京",1463),Edge("上海","香港",1200),Edge("上海","台北",700)});
g.edges["香港"]=vector<Edge>({Edge("香港","北京",2160),Edge("香港","上海",1200),Edge("香港","台北",808)});
g.edges["台北"]=vector<Edge>({Edge("台北","北京",1680),Edge("台北","上海",700),Edge("台北","香港",808)});
g.print_path("北京");
return 0;
}
还有问题请追问。