原题链接:误落迷宫
坑题,题目描述不清楚。
1:“ 接下来n行每行两个数字表示相互连通的点”,题目说相互连通容易误解为两个顶点可以相互畅通,其实只是a点到b点,b不能到a。
2: 题目没有说明接下来输入的n行数字的范围,通过样例输入很容易误解为范围<=n。
这题,不做也罢!
import java.util.Scanner;
public class Main {
/**
* @param args
*/
public static int arr[][],flag[][],n;//存储输入数据
public static boolean result;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()) {
n=sc.nextInt();
flag=new int[n+10][n+10];//标记是否走过
arr=new int[n+10][n+10];
//输入
for (int i = 0; i <n; i++) {
int start=sc.nextInt();
int end=sc.nextInt();
arr[start][end]=1;//标记有路
}
int p=sc.nextInt();//初始位置
result=true;
dfs(p);
if (result) {
System.out.println("Yes");
}else {
System.out.println("No");
}
}
}
//搜索
public static void dfs(int detp) {
for (int i = 1; i <=n; i++) {
if (arr[detp][i]==1 && flag[detp][i]==1) {//原地打转
result=false;
return ;
}
if (arr[detp][i]==1 && flag[detp][i]==0) {//有路线,且没走过
flag[detp][i]=1;
dfs(i);
flag[detp][i]=0;
}
}
}
}0.0分
4 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复