Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 28.09.2019
Сообщений: 5

Ошибка выполнения, в чем проблема?

28.09.2019, 14:37. Показов 900. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет! Задача проходит 3 теста, на 4 выдает ошибку выполнения.
Вот задача

Входные данные

В первой строке входного файла заданы целые положительные числа N и M (1 􏰀 N, M 􏰀 1000). В следующих N строках заданы по M символов, описывающих лабиринт. На позициях, по кото- рым Вася может перемещаться, записан символ “0”, а на позициях, которые перегорожены дере- вьями, записан символ “1”. После описания лабиринта следуют целые числа x1, y1, x2, y2 — коор- динаты (то есть соответствующие номера строк и столбцов) Васи и Васиного дома соответственно (1􏰀x1,x2 􏰀M,1􏰀y1,y2 􏰀N).
Выходные данные

В выходной файл выведите единственное число — длину кратчайшего пути от точки (x1,y1) до точки (x2,y2), если Вася может добраться до дому по лабиринту, и “-1” в противном случае.

Примеры

Входные
4 6
1 0 1 1 1 0
0 0 1 0 0 0
1 0 1 1 0 0
0 0 0 0 0 0
2 1
5 3

Выходные

7

Входные

4 6
1 0 1 1 1 0
0 0 1 0 0 0
1 0 1 1 0 0
0 0 0 1 0 0
2 1
5 3

Вот код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <iostream>
#include <queue>
 
using namespace std;
 
int main()
{
    int a, b; // размеры лабиринта
    cin >> a >> b;
    int mass[a + 2][b + 2][2]; // [][] - координаты, [] - первое стена или можно пройти, второе если можно пройти то номер вершины, а так -1.
    int amount = 0; // количество вершин графа
    for(int i = 0; i < a + 2; i++)
    {
        for(int ii = 0; ii < b + 2; ii++)
        {
            if(i == 0 || i == a + 1 || ii == 0 || ii == b + 1) // вокруг лабиринта ставим стены, что бы потом не было выхода за пределы массива
            {
                mass[i][ii][0] = 1; // стена
                mass[i][ii][1] = -1; // не вершина графа
            }
            else
            {
                int x;
                cin >> x; // считываем лабиринт
                mass[i][ii][0] = x;
                if(x == 0) // если не стена, то присв номер вершины
                {
                    mass[i][ii][1] = amount;
                    amount++;
                }
                else
                {
                    mass[i][ii][1] = -1;
                }
            }
        }
    }
    int mas[amount][amount]; // создаем матрицу смежности и заполняем её нулями
    for(int i = 0; i < amount; i++)
    {
        for(int ii = 0; ii < amount; ii++)
        {
            mas[i][ii] = 0;
        }
    }
    for(int i = 1; i < a + 1; i++) // обходим лабиринт, без стен вокруг и заполняем матрицу смежности
    {
        for(int ii = 1; ii < b + 1; ii++)
        {
            if(mass[i][ii][0] == 0)
            {
                if(mass[i][ii + 1][0] == 0)
                {
                    mas[mass[i][ii][1]][mass[i][ii + 1][1]] = 1;
                    mas[mass[i][ii + 1][1]][mass[i][ii][1]] = 1;
                }
                if(mass[i][ii - 1][0] == 0)
                {
                    mas[mass[i][ii][1]][mass[i][ii - 1][1]] = 1;
                    mas[mass[i][ii - 1][1]][mass[i][ii][1]] = 1;
                }
                if(mass[i + 1][ii][0] == 0)
                {
                    mas[mass[i][ii][1]][mass[i + 1][ii][1]] = 1;
                    mas[mass[i + 1][ii][1]][mass[i][ii][1]] = 1;
                }
                if(mass[i - 1][ii][0] == 0)
                {
                    mas[mass[i][ii][1]][mass[i - 1][ii][1]] = 1;
                    mas[mass[i - 1][ii][1]][mass[i][ii][1]] = 1;
                }
            }
        }
    }
    int sf, ss, fs, ff; // координаты старта и финиша
    cin >> sf >> ss >> fs >> ff;
    int s = mass[ss][sf][1], f = mass[ff][fs][1]; // по координатам получем номера вершин, расстояние между которыми нужно найти
    // далее обход в ширину
    int mask[amount]; // массив расстояний вершин от первой заданой
    for(int i = 0; i < amount; i++) mask[i] = -1; // сначала мы не знаем расстояние, поэтому -1
    mask[s] = 0; // помечаем первую вершину
    queue<int> dus;
    dus.push(s); // добавляем её в очередь
    while(dus.size() != 0) // делаем пока не обойдем все веришны в комноненте с заданой первой вершиной
    {
        int now = dus.front();
        dus.pop(); // достаем вершинускоторую нужно расмотреть из очереди
        for(int i = 0; i < amount; i++)
        {
            if(mas[now][i] == 1)
            {
                if(mask[i] > mask[now] + 1 || mask[i] == -1) // сомтрим всех ее соседей, до которых еще не доходили, а если и доходили то проверяем нен ближе ли было дойти по новому пути
                {
                    dus.push(i);
                    mask[i] = mask[now] + 1; // добавляем в очередь и указываем расстояние от начальной
                }
            }
        }
    }
    if(mask[f] != -1) // если расстояние так и не нашлось, то значит кронечная вершину в др компоненте
    {
        cout << mask[f];
    }
    else
    {
        cout << -1;
    }
}
Подскажите, пожалуйста, где ошибка в коде? Из за чего может не компилировать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.09.2019, 14:37
Ответы с готовыми решениями:

В чем может быть ошибка? Проблема с выводом очереди
Здравствуйте, нужно создать класс очереди и класс элементов. Вроде всё нормально, но когда запускаю функцию q.Print() программа...

Ошибка при попытке сопоставить список аргументов, в чем тут проблема?
Ошибка при попытке сопоставить список аргументов, помогите, что тут не так? #include &quot;pch.h&quot; #include...

Проблема на этапе выполнения программы
Прошу прощения, если нужно было в раздел С++ кидать. У меня поставлена задача считать из существующего текстового файла числа:1-ое...

1
Злостный нарушитель
 Аватар для Verevkin
10297 / 5720 / 1268
Регистрация: 12.03.2015
Сообщений: 26,488
28.09.2019, 14:58
Самая типичная ошибка новичков:
Кликните здесь для просмотра всего текста
пихать всё полотенце говнокода в main().

Переделывай.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2019, 14:58
Помогаю со студенческими работами здесь

В чем проблема?
Задача: Дано целое число A и целое число N(&gt;0). Используя один цикл, найти сумму 1 + A + A2 + A3 + . . . + AN. Вывести сумму. Сам...

В чем проблема
Всем доброго дня суток. Написал программку. Добавил функцию add_user для добавления элемента в начало структуры, но она не...

В чем проблема?
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #define HB 5 void main(); } int a; int obr; int n;

В чем проблема?
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; #include &lt;conio.h&gt; #include &quot;string.h&quot; void main() { char st; unsigned int dec; ...

Укажите где ошибка (ошибка во время выполнения программы)
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru