Moreano 2024-05-22 20:15 采纳率: 64.7%
浏览 13
已结题

数据结构图的相关代码实现

img

帮我基于以上的数据结构图结构,帮我用C++完整地实现以下的两个代码。
图1 交通网络图

根据图1所示的交通网络,完成以下任务:
代码一、

(1)根据图的稀疏程度选择使用邻接矩阵或者邻接表实现图的存储,并编码实现;

代码二、

(2)选择深度优先遍历或者广度优先遍历算法,编码实现“北京”出发浏览各地的路线图。

  • 写回答

14条回答 默认 最新

  • micthis 2024-05-23 00:25
    关注

    好了,望采纳:

    img

    #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;
    }
    

    还有问题请追问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(13条)

报告相同问题?

问题事件

  • 系统已结题 5月31日
  • 已采纳回答 5月23日
  • 修改了问题 5月22日
  • 创建了问题 5月22日