• 图— Dfs,Bfs


    对象:无权图,可不连通

    一、DFS

       1. 邻接矩阵

        a.核心代码:

        void dfs(int v)
             {
                 cout<<v<<" ";
                 visited[v]++;//标记已访问
                 for(int i=0;i<g.n;i++)
                     if(!visited[i]&&g.edges[v][i])//节点是否访问 
                         dfs(i);
             }

        b.例题地址:http://120.77.243.165/problem.php?id=3956

    #include<iostream>
    using namespace std;
    const int maxn=100;
    class Graph
    {
        struct matgraph
        {
            int n;
            int edges[maxn][maxn];
        };
        matgraph g;
        int visited[maxn];
        public:
             void make_matgraph()
             {
                 cin>>g.n;
                 for(int i=0;i<g.n;i++)
                   for(int j=0;j<g.n;j++)
                       cin>>g.edges[i][j];
             }
             void dfs(int v)
             {
                 cout<<v<<" ";
                 visited[v]++;
                 for(int i=0;i<g.n;i++)
                     if(!visited[i]&&g.edges[v][i])//节点是否访问 
                         dfs(i);
             }
        friend int main();//友元
    };
    int main()
    {
        Graph a;
        a.make_matgraph();
        for(int i=0;i<a.g.n;i++)
            a.visited[i]=0;
        for(int i=0;i<a.g.n;i++)
           if(!a.visited[i])
             a.dfs(i);
        cout<<endl;
        return 0;  
    }
    View Code

        2.邻接表式

        a.核心代码:

        b.例题地址:

    二、BFS

        1. 邻接矩阵

        a.核心代码:

        b.例题地址:

        2.邻接表式

        a.核心代码:

     void bfs(int v=0)
    {
            int queue[maxn],front=0,rear=0;
            visit[v]=1;
        queue[rear++]=v;
        cout<<v<<" ";
        while(front!=rear)
        {
             int i=queue[front++];
             for(int j=0;j<g.n;j++)
             {
                 if(!visit[j]&&g.edges[i][j])
                 {
                     cout<<j<<" ";
                     visit[j]=1;
                     queue[rear++]=j;
                 }
            }
        }
    }
    View Code

        b.例题地址:

    #include<iostream>
    using namespace std;
    const int maxn=100;
    class Mat_data//邻接矩阵
    {
        int n;
        int edges[maxn][maxn];
        friend class Matgraph;
    };
    class Matgraph
    {
        Mat_data g;//邻接矩阵
        int visit[maxn];
        public:
            void make_matgraph(int n)
            {
                g.n=n;
                for(int i=0;i<g.n;i++)
                    for(int j=0;j<g.n;j++)
                        cin>>g.edges[i][j];
             }
             void bfs(int v=0)
             {
                 int queue[maxn],front=0,rear=0;
                 visit[v]=1;
                 queue[rear++]=v;
                 cout<<v<<" ";
                 while(front!=rear)
                 {
                     int i=queue[front++];
                     for(int j=0;j<g.n;j++)
                     {
                         if(!visit[j]&&g.edges[i][j])
                         {
                             cout<<j<<" ";
                             visit[j]=1;
                             queue[rear++]=j;
                         }
                    }
                }
             }
            friend int main();
    };
    int main()
    {
        Matgraph g;
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
            g.visit[i]=0;
        g.make_matgraph(n);
        for(int i=0;i<n;i++)
            if(!g.visit[i])
                g.bfs(i);
        cout<<endl;
        return 0;  
    }
    View Code
  • 相关阅读:
    MySQL(一)
    Python(二十九)
    python(二十八)
    python(二十七)
    Python(二十六)
    Linux的安装包命令/yum 与 Rpm
    linux系统监控与硬盘分区/格式化/文件系统管理
    linux操作系统及命令Part 2
    linux命令大全总结
    linux 用户/群组/权限
  • 原文地址:https://www.cnblogs.com/shenyuling/p/9991390.html
Copyright © 2020-2023  润新知