https://coderun.yandex.ru/problem/the-path-in-the-graph Легкая

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.LinkedList
import java.util.Queue

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))
    
    val n = reader.readLine().trim().toInt()
    
    val adjMatrix = Array(n) {
        reader.readLine().trim().split(" ").map { it.toInt() }.toIntArray()
    }
    
    val (start, end) = reader.readLine().trim().split(" ").map { it.toInt() - 1 }
    
    if (start == end) {
        writer.write("0\\n")
        writer.flush()
        return
    }
    
    val visited = BooleanArray(n)
    val prev = IntArray(n) { -1 }
    
    val queue: Queue<Int> = LinkedList()
    visited[start] = true
    queue.add(start)
    
    var found = false
    
    while (queue.isNotEmpty()) {
        val current = queue.poll()
        if (current == end) {
            found = true
            break
        }
        for (neighbor in 0 until n) {
            if (adjMatrix[current][neighbor] == 1 && !visited[neighbor]) {
                visited[neighbor] = true
                prev[neighbor] = current
                queue.add(neighbor)
            }
        }
    }
    
    if (!found) {
        writer.write("-1\\n")
    } else {
        val path = mutableListOf<Int>()
        var current = end
        while (current != -1) {
            path.add(current + 1)
            current = prev[current]
        }
        path.reverse()
        
        writer.write("${path.size - 1}\\n")
        writer.write(path.joinToString(" ") + "\\n")
    }
    
    writer.flush()
    writer.close()
}