给定一个有向图,它有n个节点(节点编号为1到n),节点之间有m条单向道路/边。我们需要从节点1开始旅程,目的地是节点n。我们需要检查是否可以在不访问节点n的情况下在道路上无限行驶,如果可能,则打印“是”或“否”。另外,如果没有从节点1到n的路径,则打印“否”。n和m的值可以高达10^5。
示例:n=5,m=5
12[这里12表示节点1和节点2之间存在一条边]
2 3
3 4
4 5
5 2
答:没有,因为我们不能在不访问5的情况下内遍历节点。
n=5米=5
1 2
2 3
3 4
4 5
4 2
答:是的,存在一条路径,我们不需要访问节点5就可以旅行。
我尝试实现深度优先搜索的思想,首先检查是否存在从1到n的路径。如果存在,那么检查是否有方法在图中找到一个不包含节点n的循环。其思想是通过首先访问第n个节点,然后检查循环来定制dfs。循环检测的思想来自以下url-https://www.geeksforgeeks.org/detect-cycle-in-a-graph/
我的方法
public static void dfsCustom(int source,int dest, int numberOfNodes)
{
boolean visited[]=new boolean[numberOfNodes+1];
boolean recurVisit[]=new boolean[numberOfNodes+1];
boolean res=customUtil(source,dest,visited,recurVisit);
if(res)
System.out.println("yes");
else
System.out.println("no");
}
public static boolean customUtil(int source, int dest, boolean visited[],boolean recurVisit[])
{
visited[dest]=true; //Making the destination node visited in the beginning.
if(recurVisit[source])
return true;
if(visited[source])
return false;
visited[source]=true;
recurVisit[source]=true;
for(int v:graph[source])
{
if(customUtil(v,dest,visited,recurVisit))
return true;
}
recurVisit[source]=false;
return false;
}
我已经把我的全部代码贴在这里检查这个案子-https://pastebin.com/cwwytf1x
有没有一些边缘的情况,它可能不涵盖鉴于上述限制?
1条答案
按热度按时间3hvapo4f1#
在这一点上你肯定有问题:
也许第二个是