полезные советы

Здесь – маленькие «пустячки», облегчающие жизнь и являющиеся основой любой сущности.

OCHEWIDNO.RU

Главная Найти хорошую работу Похудеть до своего веса Комплексы
Быть умным Быть красивым Каких любят мужчины Наслаждаться
Уметь плавать Вкусно готовь Будь здоров Философия жизни
Экономика и финансы Забытые заповеди Наши детки Разное

При изменении ширины экрана (повороте мобильного) - страницу ПЕРЕГРУЗИТЬ!

Н О В О Е

(последние заметки, по дате убывания)

(ПОДРОБНЕЕ: нажать здесь!)

Правило левой руки

обход лабиринта

Вводим для примера:

10 10

7 0 8 8

1 0 1 0 0 0 0 0 0 1

0 0 0 0 1 0 0 1 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 1 0 0 1 1 0 0

0 0 1 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 0 1

1 0 0 0 0 0 0 0 0 0

0 1 1 1 1 1 1 1 1 0

0 0 0 0 0 0 0 0 0 1

1 1 1 1 1 1 1 1 1 1

import kotlin.math.abs

fun main() {
//    var w: String = null.toString()


    //println("Введите число строк n(0<n<=10^3) и число столбцов m(0<m<=10^3)")

   
val str = Array(1, { r -> readLine().toString() })
    var (n, m) = str[0]!!.split(' ')

    // print(n.toInt() + m.toInt())

    println
("Введите координаты начала в лабиринте и финиша (выхода из него) 0<=Sn,Fn<n; 0<=Sm,Fm<m")
    var tor = Array(1, { z -> readLine().toString() })
    var (x, y, x1, y1) = tor[0]!!.split(' ')
    var x2: Int = x.toInt()
    var y2: Int = y.toInt()
    var w: String = null.toString()
    var w1: String = null.toString()

    // var by lazy{ tx: Int}
  //  fun tx(lazy: Int) = x2
        //println("$x+$y+$x1+$y1")

        // println("Введите построчно описание клеток поля: 0 - есть проход, 1 - стена")
       
var torus = Array(n.toInt(), { c -> readLine().toString() })

// Создаём двумерный массив
       
var torus2M: Array<Array<Int>> = Array(n.toInt(), { Array(m.toInt(), { 0 }) })

        for (i in 0..n.toInt() - 1) {

            var v = torus[i].split(' ').toTypedArray()
            var array = arrayOf<Int>()
            for (j in 0..m.toInt() - 1) {
                array += v[j].toInt()
            }
            torus2M[i] = array
        }
        var route = arrayOf<String>()

        fun leftHandRuleL(w: String) {

            if (w != null.toString() && w == "W") {
                var k = 1
                for (k in 1..m.toInt()) {

                    if (w1 != null.toString()) {
                        var w = w1
                    }
                    var tx = x2 + 1
                    var tx3 = x2 - 1
                    var ty = y2 - k
                    if (ty < 0) {
                        ty = m.toInt() - abs(y2 - k).toInt()
                    }
                    var ty1 = ty + 1
                    if (ty1 > m.toInt() - 1) {
                        ty1 = (ty + 1) - m.toInt()
                    }
                    var ty3 = ty + 2
                    if (ty3 > m.toInt() - 1) {
                        ty3 = (ty + 2) - m.toInt()
                    }
                    if (torus2M[tx][ty1] != 1) {
                        route += "S"
                        x2 = tx
                        y2 = ty1
                        w1 = "S"
                        return

                    } else if (torus2M[x2][ty] != 1) {
                        route += "W"
                        // проверка на окончание
                       
if (x2 == x1.toInt() && ty == y1.toInt()) {
                            y2 = ty
                            return
                        }
                        continue
                    } else if (torus2M[tx3][ty1] != 1) {
                        route += "N"
                        x2 = tx3
                        w1 = "N"
                        return

                    } else {
                        route += "E"
                        y2 = ty3
                        w1 = "E"
                        return

                    }

                }
            }
        }

        fun leftHandRuleR(w: String) {
            var k = 1
            if (w != null.toString() && w == "E") {
                for (k in 1..m.toInt()) {

                    if (w1 != null.toString()) {
                        var w = w1
                    }
                    var tx = x2 - 1
                    var tx3 = x2 + 1
                    var ty = y2 + k
                    if (ty > m.toInt() - 1) {
                        ty = (y2 + k) - m.toInt()
                    }
                    var ty1 = ty - 1
                    if (ty1 < 0) {
                        ty1 = m.toInt() - abs(ty - 1).toInt()
                    }
                    var ty3 = ty - 2
                    if (ty3 < 0) {
                        ty3 = m.toInt() - abs(ty - 2).toInt()
                    }
                    if (torus2M[tx][ty1] != 1) {
                        route += "N"
                        x2 = tx
                        w1 = "N"
                        return

                    } else if (torus2M[x2][ty] != 1) {
                        route += "E"
                        // проверка на окончание
                       
if (x2 == x1.toInt() && ty == y1.toInt()) {
                            y2 = ty
                            return
                        }
                        continue
                    } else if (torus2M[tx3][ty1] != 1) {
                        route += "S"
                        x2 = tx3
                        w1 = "S"
                        return

                    } else {
                        route += "W"
                        y2 = ty3
                        w1 = "W"
                        return

                    }

                }
            }
        }

        fun leftHandRuleV(w: String) {
            var k = 1
            if (w != null.toString() && w == "N") {
                for (k in 1..n.toInt()) {

                    if (w1 != null.toString()) {
                        var w = w1
                    }
                    var tx = x2 - k
                    if (tx < 0) {
                        tx = n.toInt() - abs(x2 - k).toInt()
                    }
                    var tx1 = tx + 1
                    if (tx1 > m.toInt() - 1) {
                        tx1 = (tx + 1) - n.toInt()
                    }
                    var tx3 = tx + 2
                    if (tx3 > m.toInt() - 1) {
                        tx3 = (tx + 2) - n.toInt()
                    }
                    var ty = y2 - 1
                    var ty3 = y2 + 1

                    if (torus2M[tx1][ty] != 1) {
                        route += "W"
                        y2 = ty
                        w1 = "W"
                        return

                    } else if (torus2M[tx][y2] != 1) {
                        route += "N"
                        // проверка на окончание
                       
if (tx == x1.toInt() && y2 == y1.toInt()) {
                            x2 = tx
                            return
                        }
                        continue
                    } else if (torus2M[tx1][ty3] != 1) {
                        route += "E"
                        y2 = ty3
                        w1 = "E"
                        return

                    } else {
                        route += "S"
                        x2 = tx3
                        w1 = "S"
                        return

                    }

                }
            }
        }

        fun leftHandRuleD(w: String) {
            var k = 1
            if (w != null.toString() && w == "S") {
                for (k in 1..n.toInt()) {

                    if (w1 != null.toString()) {
                        var w = w1
                    }
                    var tx = x2 + k
                    if (tx > n.toInt() - 1) {
                        tx = (x2 + k) - n.toInt()
                    }
                    var tx1 = tx - 1
                    if (tx1 < 0) {
                        tx1 = m.toInt() - abs(tx - 1).toInt()
                    }
                    var tx3 = tx - 2
                    if (tx3 < 0) {
                        tx3 = m.toInt() - abs(tx - 2).toInt()
                    }
                    var ty = y2 + 1
                    var ty3 = y2 - 1

                    if (torus2M[tx1][ty] != 1) {
                        route += "E"
                        y2 = ty
                        w1 = "E"
                        return

                    } else if (torus2M[tx][y2] != 1) {
                        route += "S"
                        // проверка на окончание
                       
if (tx == x1.toInt() && y2 == y1.toInt()) {
                            x2 = tx
                            return
                        }
                        continue
                    } else if (torus2M[tx1][ty3] != 1) {
                        route += "W"
                        y2 = ty3
                        w1 = "W"
                        return

                    } else {
                        route += "N"
                        x2 = tx3
                        w1 = "N"
                        return

                    }

                }
            }
        }
        do {
            if (w == null.toString()) {
                w = "W"
            }
            // проверка на окончание
           
if (x2 == x1.toInt() && y2 == y1.toInt()) {
                break
            }
            //движение по направлениям:
            // влево

           
if (w1 != null.toString()) {
                w = w1
            }

            if (w == "W") {
                leftHandRuleL(w)
            }
            if (w1 != null.toString()) {
                w = w1
            }
            if (w == "S") {
                leftHandRuleD(w)
            }
            if (w1 != null.toString()) {
                w = w1
            }
            if (w == "N") {
                leftHandRuleV(w)
            }

            if (w1 != null.toString()) {
                w = w1
            }
            if (w == "E") {
                leftHandRuleR(w)
            }

        } while (x2 != x1.toInt() || y2 != y1.toInt())
        var z: String = route.contentToString()
        println("Описание пути выхода $z где E - вправо, W - влево, N - вверх, S - вниз")

}

Подписки НЕТ!

Поиск необходимой информации осуществляется в разделах Главного меню по ссылкам.

Уважая чужой опыт, считаю ОБЯЗАТЕЛЬНЫМ наличие «Обратной связи»:

Обратная связь

Права на материалы, размещенные на сайте, принадлежат Автору. Все права защищены и охраняются законом. При использовании материалов с сайта ссылка на него обязательна.

весна
Правильный CSS! Правильный CSS!
>