图— 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

 

posted @ 2018-11-20 20:35  shenyuli  阅读(180)  评论(0编辑  收藏  举报
Live2D