[백준] 1976번 - 여행 가자 (골드 4)

AI·2025년 10월 22일

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;
    }
}

0개의 댓글