解法:dfs / bfs

这道题就是一个简单的 floodfill 算法,其实就是统计联通块的数量。通过dfs或bfs遍历即可。

需要注意的的是这道题它需要遍历的是一个图,而不是矩阵!!!

代码实现如下所示(dfs和bfs都写了):

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param m int整型vector<vector<>> 
     * @return int整型
     */
    bool st[210] = {0};
    int citys(vector<vector<int> >& m) 
    {
        int ret = 0;
        for(int i = 0; i < m.size(); i++)
        {
            if(!st[i])
            {
                ret++;
                bfs(m, i);
            }
        }
        return ret;
    }

    void dfs(vector<vector<int> >& m, int pos)
    {
        st[pos] = true;

        for(int i = 0; i < m.size(); i++)
        {
            if(!st[i] && m[pos][i]) // 访问与pos位置相连的点,且没有访问的点
            {
                dfs(m, i);
            }
        }
    }

    void bfs(vector<vector<int> >& m, int start)
    {
        queue<int> q;
        q.push(start);
        while(q.size())
        {
            int pos = q.front(); q.pop();
            st[pos] = true;

            // 访问与pos位置相连的点,且没有访问的点
            for(int i = 0; i < m.size(); i++)
            {
                if(!st[i] && m[pos][i])
                {
                    q.push(i);
                }
            }
        }
    }
};