标签:int 题解 List new color 2021 graph 今日
找到最终安全的路径
哎呀,这个题怎么说呢,我想的是找出所有的点来,但是怎么找呢,我想着从后往前找,但是遇到一个问题,因为有点复杂我也没有去找,尝试几次之后我就放弃了,然后就开始想正着找出来,也没有想到什么好的方法,后来就突然想到其实可以去找不是的点,有想到不是的点最终其实都会和回路有关系,所以搜索一下其实就解决了,我还花了这么长时间想别的方法。
把题解的代码放在下面把,作为正确的题解,然后再把我的错误代码放在下面,我觉得我的方法应该也可以做出来,但是也需要做上标记来确定回路,等下次再仔细看看。
题解:
class Solution {
public List<Integer> eventualSafeNodes(int[][] graph) {
int n = graph.length;
int[] color = new int[n];
List<Integer> ans = new ArrayList<Integer>();
for (int i = 0; i < n; ++i) {
if (safe(graph, color, i)) {
ans.add(i);
}
}
return ans;
}
public boolean safe(int[][] graph, int[] color, int x) {
if (color[x] > 0) {
return color[x] == 2;
}
color[x] = 1;
for (int y : graph[x]) {
if (!safe(graph, color, y)) {
return false;
}
}
color[x] = 2;
return true;
}
}
作者:LeetCode-Solution
我的:
class Solution {
public List<Integer> eventualSafeNodes(int[][] graph) {
int[][] map=new int[graph.length][graph.length];
List<Integer> list=new ArrayList<>();
LinkedList<Integer> yes=new LinkedList<>();
List<Integer> no=new ArrayList<>();
for(int i=0;i<graph.length;i++){
boolean flag=true;
map[i][i]=1;
for(int j=0;j<graph[i].length;j++) {
map[i][graph[i][j]]=1;
flag=false;
}
if (flag)yes.add(i);
else no.add(i);
}
int n=graph.length;
while(n!=0){
if(!yes.isEmpty()){
Integer integer = yes.pollFirst();
int sum=0;
for(int j=0;j<graph.length;j++){
if(map[j][integer]==1&&!yes.contains(j)&&integer!=j&&!list.contains(j))yes.add(j);
if(!list.contains(j))sum+=map[integer][j];
}
if(sum==1)list.add(integer);
}
n--;
}
list.sort(Integer::compareTo);
return list;
}
}
标签:int,题解,List,new,color,2021,graph,今日 来源: https://blog.csdn.net/LI206131925/article/details/119427969
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。