Z.506 2022-06-11 17:05 采纳率: 100%
浏览 44
已结题

最小换乘,求最短路径的问题

设某城市有n个车站,并有m条公交线路连接这些车站。设这些公交
车都是单向的,这n个车站被顺序编号为0-n-l。本程序,输入该城市的公交线
路数、车站个数、以及各公交线路上的各站编号。
要求:

(1求从站0出发乘公交车至其他车站的最少换车次数,并输出所经过的站点序
列;
(2利用输入信息构建一张有向图,分别用邻接矩阵和邻接表表示,并输出邻接
矩阵和邻接表信息;

(3从站0出发,对公交线路图进行遍历。

收起全部

  • 写回答

1条回答 默认 最新

  • .柚不幼.love. 2022-06-11 17:29
    关注

    邻接表:

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<iomanip>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstdlib>
    #include<queue>
    #include<deque>
    #include<vector>
    int i,j,a,b,n1,m1;
    using namespace std;
    
    struct node
    {
        int v;
        int w;
    };
    vector<node> e[105];
    int n,m,vis[100001],mapa[1001][1001],ans=1000000001;
    void dfs(int x,int dis)
    {
        int i;
        if(dis>=ans)//小剪枝 
            return;
            
        if(x==n)
        {
            ans=min(ans,dis);
            return;
        }
        node tt; 
        for(int i=0;i<e[x].size();i++)
        {
            tt=e[x][i];
            if(vis[tt.v]==0)
            {
                vis[tt.v]=1;
                dfs(tt.v,dis+tt.w);
                vis[tt.v]=0;
            }
        } 
    }
    int main()
    {
        node t;
        cin>>n>>m>>n1>>m1;
        //memset(mapa,0x3f,sizeof(mapa));//初始化
         
        for(j=0;j<m;j++)
        {
            cin>>a>>b;
            t.v=b;
            t.w=1;
            e[a].push_back(t);
            t.v=a;
            t.w=1;
            e[b].push_back(t);
           
        }
        vis[1]=1;
        dfs(1,0);
        cout<<ans<<endl;
        return 0;
    }
    
    

    邻接矩阵:

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,vis[100001],mapa[1001][1001],ans=1000000001;
    void dfs(int x,int dis)
    {
        int i;
        if(dis>ans)//小剪枝 
            return;
        if(x==n)
        {
            ans=min(ans,dis);
            return;
        }
        for(i=1;i<=n;i++) //不一定向前走,可能绕一下更近 
        if(mapa[x][i]!=0x3f3f3f3f&&vis[i]==0) 
        {
            vis[i]=1;
            dfs(i,dis+mapa[x][i]);
            vis[i]=0;
         } 
    }
    int main()
    {
        int i,j,a,b,n1,m1;
        cin>>n>>m>>n1>>m1;
        memset(mapa,0x3f,sizeof(mapa));
        for(j=0;j<m;j++)
        {
            cin>>a>>b;
            mapa[b][a]=1;//保证单向 
            mapa[a][b]=1;
        }
        vis[1]=1;
        dfs(1,0);
        cout<<ans<<endl;
        return 0;
    }
    
    

    链式前向星

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<iomanip>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstdlib>
    #include<queue>
    #include<deque>
    using namespace std;
    
    struct edge
    {
        int to;
        int nxt;
    }e[300]; 
    int cnt;
    int h[105];
    void addedge(int u,int v)
    {
        cnt++;
        e[cnt].to=v;
        e[cnt].nxt=h[u];
        h[u]=cnt;
    }
    int n,m,vis[100001],mapa[1001][1001],ans=1000000001;
    void dfs(int x,int dis)
    {
        int i;
        if(dis>=ans)
            return;
        if(x==n)
        {
            ans=min(ans,dis);
            return;
        }
        for(int i=h[x];i>0;i=e[i].nxt)
        {
            int to=e[i].to;
            if(vis[to]==0)
            {
                vis[to]=1;
                dfs(to,dis+1);
                vis[to]=0;
            }
        }
    }
    int main()
    {
        int n1,m1; 
        cin>>n>>m>>n1>>m1;
        int i,j,a,b,c;
        for(j=0;j<m;j++)
        {
            cin>>a>>b;
            addedge(a,b);
            addedge(b,a);
        }
        vis[1]=1;
        dfs(1,0);
        cout<<ans<<endl;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月20日
  • 已采纳回答 6月12日
  • 创建了问题 6月11日

悬赏问题

  • ¥15 请提供一个符合要求的网页链接。
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码