zoukankan      html  css  js  c++  java
  • 图— 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
  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/shenyuling/p/9991390.html
Copyright © 2011-2022 走看看