标签:状态 找到 graph List int leetcode802 new 节点 逆序
找到最终的安全状态
题目:找到最终的安全状态
对于一个起始节点,如果从该节点出发,无论每一步选择沿哪条有向边行走,最后必然在有限步内到达终点,则将该起始节点称作是 安全的。
返回一个由图中所有安全节点,节点应当按 升序 排列。
示例 1:
输入:graph = [[1,2],[2,3],[5],[0],[5],[],[]]
输出:[2,4,5,6]
题解
- 将所有边逆序,得到逆序图
- 在逆序图中,寻找拓扑排序。
- 所有拓扑排序的节点都是安全节点
class Solution {
public List<Integer> eventualSafeNodes(int[][] graph) {
Queue<Integer> queue=new ArrayDeque<>();
int book[]=new int[graph.length];
List<Integer> map[]=new List[graph.length];
List<Integer> res=new ArrayList<>();
for(int i=0;i<graph[i].length;i++)
{
for(int j=0;j<graph.length;j++)
{
if(map[graph[i][j]]==null) map[graph[i][j]]=new ArrayList<>();
map[graph[i][j]].add(i);
book[i]++;
}
}
for(int i=0;i<book.length;i++){
if(book[i]==0){
queue.add(i);
}
}
while (!queue.isEmpty())
{
int temp=queue.poll();
res.add(temp);
if(map[temp]!=null && map[temp].size()>0)
{
for(int i=0;i<map[temp].size();i++)
{
if(--book[map[temp].get(i)]==0)
queue.add(map[temp].get(i));
}
}
}
Collections.sort(res);
return res;
}
}
标签:状态,找到,graph,List,int,leetcode802,new,节点,逆序 来源: https://www.cnblogs.com/greengages/p/15733821.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。