LeetCode_802找到最终的安全状态(dfs)

题目链接:https://leetcode-cn.com/problems/find-eventual-safe-states/description/

        本题大意就是找出所有不与环连通的结点。不安全状态有两种情况:1、这个点在一个环中。2、这个点顺着边递推,会走到一个环里。所以本题的思路是给点设置三种状态,初始时的0表示未访问过的点;1表示这个点是不安全的,即这个点连接着一个环或就在环中;2表示这个点是安全的,不与任何环连通。然后对每个点进行深度优先搜索,若遇到了不安全的点,那么这个点也是不安全的,置为2。若遇到了安全的点,则表示已经有了一条可以通向终点的路径,那么这个点也是安全的,置为2。代码如下:

class Solution {
public:
	bool dfs(int i,vector& color,vector >& gra)
	{
		//若这个点为0,则进行下面的访问操作,否则返回这个点的状态 
		if(color[i])
			return color[i]==2;
		//在未到达终点前,所有点都是不安全的。 
		color[i]=1;
		//深度优先搜索 
		for(int j=0;j eventualSafeNodes(vector >& graph) {
    	int n=graph.size();
        vector res;
        vector color(n,0);
        //对每个点进行搜索,将安全的点加入结果集中 
        for(int i=0;i

 

你可能感兴趣的:(LeetCode题解,深度优先搜索)