https://www.acmicpc.net/problem/1976
import java.util.*;
import java.io.*;
public class Main {
static int n,m; // 200이하, 1000이하
static boolean[] vis;
static ArrayList<ArrayList<Integer>> city = new ArrayList<>();
static int[] travel;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
m = Integer.parseInt(br.readLine());
for(int i=0;i<=n;i++){
city.add(new ArrayList<>());
}
travel = new int[n+1];
vis = new boolean[n+1];
for(int i=1;i<=n;i++){
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=1;j<=n;j++){
int a = Integer.parseInt(st.nextToken());
if(a==1){
city.get(i).add(j);
}
}
}
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<m;i++){
travel[i] = Integer.parseInt(st.nextToken());
}
for(int i=0;i<m-1;i++){
Arrays.fill(vis, false);
if(! dfs(travel[i],travel[i+1])){
System.out.println("NO");
return;
}
}
System.out.println("YES");
}
static boolean dfs(int s, int e){
vis[s] = true;
if (s == e) {
return true;
}
for(int i : city.get(s)){
// if(i==e){
// return true;
// } else if(!vis[i]){
// dfs(i,e);
// }
if(!vis[i]){
if(dfs(i,e)){
return true;
}
}
}
return false;
}
}
dfs 수정함
=> 런타임 에러
travel 배열을 제대로 설정을 안해서 그랬음
import java.util.*;
import java.io.*;
public class Main {
static int n,m; // 200이하, 1000이하
static boolean[] vis;
static ArrayList<ArrayList<Integer>> city = new ArrayList<>();
static int[] travel;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
m = Integer.parseInt(br.readLine());
for(int i=0;i<=n;i++){
city.add(new ArrayList<>());
}
travel = new int[m]; // n으로 입력되있었음
vis = new boolean[n+1];
for(int i=1;i<=n;i++){
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=1;j<=n;j++){
int a = Integer.parseInt(st.nextToken());
if(a==1){
city.get(i).add(j);
}
}
}
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<m;i++){
travel[i] = Integer.parseInt(st.nextToken());
}
for(int i=0;i<m-1;i++){
Arrays.fill(vis, false);
if(! dfs(travel[i],travel[i+1])){
System.out.println("NO");
return;
}
}
System.out.println("YES");
}
static boolean dfs(int s, int e){
vis[s] = true;
if (s == e) {
return true;
}
for(int i : city.get(s)){
if(!vis[i]){
if(dfs(i,e)){
return true;
}
}
}
return false;
}
}