数据结构与算法作业30

Leecode210

题目

给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。

分析

该题入上一道的课程表一,只是返回的值不同而已,但步骤都是相同的。

解法

直接上代码了:

public int[] FindOrder(int numCourses, int[][] prerequisites)        {            
	IEnumerable<int> enumerable = Enumerable.Range(0, numCourses);            
	List<int>[] list = enumerable.Select(c => new List<int>()).ToArray();            
	foreach (int[] item in prerequisites)            
	{                
		list[item[0]].Add(item[1]);            
	}                        
	var trueList = new HashSet<int>();            
	for (int i = 0; i < numCourses; i++)            
	{                
		if (!DFS(trueList, new HashSet<int>(), list, i))                
		{                    
			return new int[0];                
		}            
	}            
	return trueList.ToArray();        
}            
public bool DFS(HashSet<int> trueList, HashSet<int> used,List<int>[] list, int id)        
{            
	if (trueList.Contains(id))            
	{                
		return true;            
	}            
	if (used.Contains(id))            
	{                
		return false;            
	}            
	else            
	{                
		used.Add(id);            
	}
  	foreach (int item in list[id])            
  	{                
  		if (DFS(trueList, used, list, item) == false)                
  		{                    
  			return false;                
  		}            
  	}            
  	trueList.Add(id);            
  	return true;        
  }

效果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值