Форум программистов, компьютерный форум CyberForum.ru

ACCESS_VIOLATION при решении задачи - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка (бинарный, дружественный оператор) http://www.cyberforum.ru/cpp-beginners/thread878486.html
В классе Ellipse перегрузить оператор - (бинарный, дружественный оператор)
C++ Указатели. Из трех введенных с клавиатуры чисел преподнести в квадрат отрицательние а положительные оставити без изменений Из трех введенных с клавиатуры чисел преподнести в квадрат отрицательние а положительные оставити без изменений http://www.cyberforum.ru/cpp-beginners/thread878479.html
Преобразовать массив таким образом, чтобы в его первой половине расположились элементы, стоящие в четных позициях C++
Всем привет. Не знаю как сделать одно из 4 заданий по работе с массивами: 4)превратить массив таким образом, чтобы в его первой половине расположились элементы, стоящие в четных позициях, а во второй половине-элементы стоящие в нечетных позициях Подскажите пожалуйста,что и как делать.Буду очень благодарен
Как обратиться к элементу списка list ? C++
list<int> a;
C++ сравнение файлов http://www.cyberforum.ru/cpp-beginners/thread878454.html
Нужно доделать программу вот по такому заданию Даны символьные файлы f и s . Записать в файл h все начальные совпадающие компоненты файлов s и f . #include <iostream> #include <string> bool Compare(const std::string & a, const std::string & b){ if ( a.length() != b.length() ) return false; for ( size_t i = 0; i < a.length(); ++i ) if ( a != b ) ...
C++ СЛАУ методом Гаусса где ведущий элемент отыскивается Среди строк и столбцов Народ помагите немагу разобраться, написал Гауса но немагу разобраться как сделать это (где ведущий элемент отыскивается среди строк и столбцов) Вот рабочая прога.Оч нада в долгу не останусь) float det(float , int); //___________________________________________________________________ void iskl(float a, int k, int n) //cyda peredaetsya matrica temp { int i, j; float r, b; подробнее

Показать сообщение отдельно
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1

ACCESS_VIOLATION при решении задачи - C++

25.05.2013, 21:01. Просмотров 463. Ответов 8
Метки (Все метки)

Здравствуйте!Тут решал одну простую задачу, но на dl.gsu.by она не проходит последний тест:не пройден 10-й тест. Решение вызвало ошибку ACCESS_VIOLATION

Вот сама задача:

Входной файл: input.txt
Выходной файл: output.txt
Время на тест: 2 секунды
Ограничение на память: 16 МБ

Задан неориентированный взвешенный граф G. В графе возможно наличие нескольких ребер между одной и той же парой вершин. Найдите вес кратчайшего пути между двумя заданными вершинами A и B.

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

Первая строка входного файла содержит два целых число N (1 ≤ N ≤ 1000) - количество вершин графа и M (1 ≤ M ≤ 100000) - количество ребер графа. В каждой из следующих M строк содержатся ровно три числа a, b, c (1 ≤ a, b ≤ N, 1 ≤ c ≤ 100000). Эти числа описывают ребро, соединяющее вершины с номерами a и b и имеющее вес c. Последние две строки содержат целые числа A и B (1 ≤ A, B ≤ N) - начальную и конечную вершины пути. Вершины нумеруются последовательными натуральными числами от 1 до N.

Выходные данные. Единственная строка выходного файла должна содержать одно целое число, равное весу кратчайшего пути между вершинами A и B в графе G.



Вот мой код (первые 9 тестов проходит успешно):
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
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <utility>
#include <cstdlib>
#include <climits>
#include <queue>
#include <vector>
 
using namespace std;
 
const long long maxn=1010,maxm=100010;
long long ef[maxm],es[maxm],ev[maxm],nexti[maxm],first[maxn],last[maxn],c,n,m,a,b,i,x,y,z;
vector<long long> d(maxn,LLONG_MAX);
priority_queue<pair<long long,long long>,vector<pair<long long,long long> >,greater<pair<long long,long long> > >q;
 
void prepare()
{
    c=n=m=a=b=0;
}
 
void add(long long v1,long long v2,long long value)
{
    ++c;
    ef[c]=v1;es[c]=v2;ev[c]=value;
    if(!first[v1])  first[v1]=c;
    if(last[v1])    nexti[last[v1]]=c;
    last[v1]=c;
}
 
void input()
{
    scanf("%I64d%I64d",&n,&m);
    for(i=0;i<m;++i)
    {
        scanf("%I64d%I64d%I64d",&x,&y,&z);
        add(x,y,z);
        add(y,x,z);
    }
    scanf("%I64d%I64d",&a,&b);
}
 
void output()
{
    printf("%I64d",d[b]);
}
 
void dist()
{
    d[a]=0;
    q.push(make_pair(0,a));
    while(!q.empty())
    {
        long long to=q.top().second,line=q.top().first;
        q.pop();
        if(line>d[to])  continue;
        for(long long h=first[to];h;h=nexti[h])
        {
            if(line+ev[h]<d[es[h]])
            {
                d[es[h]]=line+ev[h];
                q.push(make_pair(d[es[h]],es[h]));
            }
        }
    }
}
 
 
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    prepare();
    input();
    dist();
    output();
    //system("pause");
}
Выхода за границы массива вроде как нет, деления на 0 я тут не вижу, по памяти всё проходит.Уже битый час сижу, и ошибку найти не могу.Помогите пожлауйста.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru