题解:
class Solution { public: bool canVisitAllRooms(vector<vector<int>>& rooms) { // 1.这里需要用到队列的特性,和数据结构里里面二叉树的层次遍历差不多; // 2.本题通过数组模拟队列,首先以0号位置作为出发点,将0放入队列 // 3.while循环判断,每次需要判断队列是否为空,如果队列不为空,取队首,遍历队rooms首位置,此位置没有被访问,放入队列等待后期被访问; // 最后只需要判断队列里的元素个数和房间个数是否相等就好了,相等true int fg[1001]={0},t; fg[0]=1; // 模仿队列 int S[1001],head=0,tail=0; S[tail]=0; // 插入元素 tail++; while(head<tail) // head<tail 说明队列不为空 { t=S[head]; // 获取队首元素 head++; // 移除队首元素 for(int i=0;i<rooms[t].size();i++) { int item=rooms[t][i]; if(fg[item]==0){ fg[item]=1; S[tail]=item;// 插入元素 tail++; } } } if(tail!=rooms.size()) return false; else return true; } };