美文网首页
BFS判断连通性-S276求矩阵块数

BFS判断连通性-S276求矩阵块数

作者: 余生筑 | 来源:发表于2019-03-16 15:27 被阅读0次
    /*BFS实现*/
    #include <iostream>
    #include<queue>
    using namespace std;
    const int MAXV=100;//定义const量
    struct node//定义结构体
    {
        int x,y;
    } Node;
    int N,M;
    int G[MAXV][MAXV];
    bool vest[MAXV][MAXV];//inque[i][j]为true,则表示该点曾经入队
    int go[4][2]={0,1,0,-1,1,0,-1,0};//4向数组
    bool judge(int i,int j)
    {
        if(i<0||i>=N||j<0||j>=M||vest[i][j]||G[i][j]==0)//在遍历矩阵块时才需要判断边界
            return false;
        return true;
    }
    void BFS(int i,int j)
    {
        queue<node> que;
        Node.x=i;
        Node.y=j;
        que.push(Node);
        vest[i][j]=true;
        while(!que.empty())
        {
        node top=que.front();
        que.pop();
        for(int i=0; i<4; i++)
        {
            Node.x=top.x+go[i][0];
            Node.y=top.y+go[i][1];
            if(judge(Node.x,Node.y))
            {
                que.push(Node);
                vest[Node.x][Node.y]=true;
            }
        }
        }
    }
    int main()
    {
        fill(vest[0],vest[0]+MAXV*MAXV,false);
    
        for(int i=0; i<MAXV; i++)
        {
            for(int j=0; j<MAXV; j++)
            {
                vest[i][j]=false;
            }
        }
    
        cin>>N>>M;
        for(int i=0; i<N; i++)
        {
            for(int j=0; j<M; j++)
            {
                cin>>G[i][j];
            }
        }
    
        int cnt=0;
        for(int i=0; i<N; i++)
        {
            for(int j=0; j<M; j++)
            {
                //挑选未被遍历的矩阵块的起点
                if(G[i][j]==1&&vest[i][j]==false)
                {
                    cnt++;
                    BFS(i,j);
                }
            }
        }
    
        cout<<cnt<<endl;
        return 0;
    }
    
    /*输入:6 7
    0 1 1 1 0 0 1
    0 0 1 0 0 0 0
    0 0 0 0 1 0 0
    0 0 0 1 1 1 0
    1 1 1 0 1 0 0
    1 1 1 1 0 0 0
    输出:4
    

    相关文章

      网友评论

          本文标题:BFS判断连通性-S276求矩阵块数

          本文链接:https://www.haomeiwen.com/subject/zyrsmqtx.html