提高效率!!!两道题+看并查集
841.钥匙和房间
忘了把visited 加引用了:&
cpp
class Solution {
public:
bool canVisitAllRooms(vector<vector<int>>& rooms) {
vector<int>visited(rooms.size(),false);
dfs(rooms,visited,0);
for(int i = 0;i < rooms.size();i++){
if(visited[i] == false)return false;
}
return true;
}
void dfs(vector<vector<int>>& rooms,vector<int>&visited,int key){
if(visited[key] == true)return;
visited[key] = true;
vector<int>keys = rooms[key];
for(int i = 0; i < keys.size();i++){
dfs(rooms,visited,keys[i]);
}
}
};
463. 岛屿的周长
第一是不要算重边即可。
第二是有两个挨着的岛屿就总周长减2。
第三这题不用dfs or bfs。
cpp
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
int island_num = 0;
int count = 0;
for(int i = 0;i < grid.size();i++){
for(int j = 0;j < grid[0].size();j++){
if(grid[i][j] == 1){
island_num++;
if((i - 1) >= 0 && grid[i-1][j] == 1)count++;
if((j-1) >= 0 && grid[i][j-1] == 1)count++;
}
}
}
return island_num * 4 - count * 2;
}
};
图论还剩三道题,明天争取拿下!!!