解法: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);
}
}
}
}
};

京公网安备 11010502036488号