【根据官方题解理解后解答
使用官方解答方法一】
【图】【链表】
目录
题目:
解答:
【深度优先搜索+三颜色标记】
官方解答也比较详细
答题所用代码:
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,i,color))
ans.add(i);
}
return ans;
}
public boolean safe(int [][]graph,int k,int []color)
{
if(color[k]>0)
return color[k]==2;
color[k]=1;//访问一个节点时,首先将它标记为1在环上
for(int i:graph[k])
{
if(!safe(graph,i,color))//有在环上,不满足
return false;
}
color[k]=2;//
return true;
}
}
完整代码:
【有主函数的程序】从上面扒下来的
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,i,color))
ans.add(i);
}
return ans;
}
public boolean safe(int [][]graph,int k,int []color)
{
if(color[k]>0)
return color[k]==2;
color[k]=1;//访问一个节点时,首先将它标记为1在环上
for(int i:graph[k])
{
if(!safe(graph,i,color))//有在环上,不满足
return false;
}
color[k]=2;//
return true;
}
}
public class MainClass {
public static int[] stringToIntegerArray(String input) {
input = input.trim();
input = input.substring(1, input.length() - 1);
if (input.length() == 0) {
return new int[0];
}
String[] parts = input.split(",");
int[] output = new int[parts.length];
for(int index = 0; index < parts.length; index++) {
String part = parts[index].trim();
output[index] = Integer.parseInt(part);
}
return output;
}
public static int[][] stringToInt2dArray(String input) {
JsonArray jsonArray = JsonArray.readFrom(input);
if (jsonArray.size() == 0) {
return new int[0][0];
}
int[][] arr = new int[jsonArray.size()][];
for (int i = 0; i < arr.length; i++) {
JsonArray cols = jsonArray.get(i).asArray();
arr[i] = stringToIntegerArray(cols.toString());
}
return arr;
}
public static String integerArrayListToString(List<Integer> nums, int length) {
if (length == 0) {
return "[]";
}
String result = "";
for(int index = 0; index < length; index++) {
Integer number = nums.get(index);
result += Integer.toString(number) + ", ";
}
return "[" + result.substring(0, result.length() - 2) + "]";
}
public static String integerArrayListToString(List<Integer> nums) {
return integerArrayListToString(nums, nums.size());
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
int[][] graph = stringToInt2dArray(line);
List<Integer> ret = new Solution().eventualSafeNodes(graph);
String out = integerArrayListToString(ret);
System.out.print(out);
}
}
}