zoukankan      html  css  js  c++  java
  • careercup-树与图 4.2

    4.2 给定有向图,设计一个算法,找出两个结点之间是否存在一条路径。

    解答

    根据题意,给定一个有向图和起点终点,判断从起点开始,是否存在一条路径可以到达终点。 考查的就是图的遍历,从起点开始遍历该图,如果能访问到终点, 则说明起点与终点间存在路径。稍微修改一下遍历算法即可。

     使用广度优先遍历实现代码:

    #include<iostream>
    #include<queue>
    #include<cstring>
    using namespace std;
    
    const int n=4;
    bool visited[n];
    queue<int> q;
    
    bool isroute(int matrix[][4],int src,int des)
    {
        int i;
        visited[src]=true;
        q.push(src);
        while(!q.empty())
        {
            int tmp=q.front();
            q.pop();
            for(i=0;i<n;i++)
            {
                if(matrix[tmp][i]&&!visited[i])
                {
                    visited[i]=true;
                    if(visited[des])
                        return true;
                    q.push(i);
                }
            }
        }
        return false;
    }
    
    int main()
    {
        memset(visited,false,sizeof(visited));
        int matrix[n][n]={{0,1,1,1},{1,0,1,0},{1,1,0,1},{1,0,1,0}};
        cout<<isroute(matrix,1,3)<<endl;
    }

    DFS

    #include<iostream>
    #include<queue>
    #include<cstring>
    using namespace std;
    
    const int n=4;
    bool visited[n];
    queue<int> q;
    
    //DFS
    bool isroute(int matrix[][4],int src,int des)
    {
        int i;
        visited[src]=true;
        for(i=0;i<n;i++)
        {
            if(matrix[src][i]&&!visited[i])
                isroute(matrix,i,des);
        }
        return visited[des];
    }
    
    int main()
    {
        memset(visited,false,sizeof(visited));
        int matrix[n][n]={{0,0,0,1},{1,0,1,0},{1,1,0,0},{0,0,0,0}};
        cout<<isroute(matrix,3,1)<<endl;
    }
  • 相关阅读:
    RAD Studio最终版合集
    cxGrid 锁定一行,让该行数据不能编辑
    跨平台打开一个URL的方法
    【转】DELPHI开始支持LINUX DOCKER
    HTTP请求的拦截
    SVG图像
    Kafka
    HBase分布式集群部署
    HBase
    Mapreduce提交YARN集群运行
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4147880.html
Copyright © 2011-2022 走看看