提高效率!!!两道题+看并查集
忘了把visited 加引用了:&
- class Solution {
- public:
- bool canVisitAllRooms(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
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]);
- }
- }
- };
第一是不要算重边即可。
第二是有两个挨着的岛屿就总周长减2。
第三这题不用dfs or bfs。
- class Solution {
- public:
- int islandPerimeter(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;
- }
- };
图论还剩三道题,明天争取拿下!!!