ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Общий форум

Why I have Crash(acces violation)
Послано Husan 15 апр 2008 02:39
#include<iostream>
using namespace std;

const maxl=10000;

int n,m,a[405][405]={0};
int min_p=100000,p[405]={0};
int b[20002],e[20002],d[405],pred[405];


int circl(int v,int e)
{
    int i,j,pr[405]={0},bliz,mind;

    for(i=1;i<=n;i++)
    {
        pred[i]=v;
        d[i]=a[v][i];
    }

    pr[v]=1;
    pred[v]=v;

    for(i=1;i<=n;i++)
    {
        mind=maxl;
        for(j=1;j<=n;j++)
            if(pr[j]==0 && mind>d[j]){mind=d[j];bliz=j;};

        pr[bliz]=1;
        for(j=1;j<=n;j++)
        {
            if(pr[j]==0 && d[j]>d[bliz]+a[bliz][j])
            {
                d[j]=d[bliz]+a[bliz][j];
                pred[j]=bliz;
            }
        }
    }


    return d[e];
}

void vvod()
{
    int i,j,k1,k2,c;

    cin>>m;

    for(i=1;i<=m;i++)
    {
        cin>>b[i]>>e[i]>>c;

        k1=b[i];k2=e[i];

        if(a[k1][k2]!=maxl)a[k1][k2]=a[k2][k1]=min(a[k1][k2],c);
        else a[k1][k2]=a[k2][k1]=c;
    }
}

int main()
{
    int i,j,k,temp,dl,z=0;
    bool pr=0;

    for(k=1;n!=-1;k++)
    {

        cin>>n;

        if(n==-1)break;

        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)a[i][j]=maxl;

        vvod();

        for(i=1;i<=m;i++)
        {
            temp=a[b[i]][e[i]];
            a[b[i]][e[i]]=maxl;

            dl=circl(b[i],e[i]);

            a[b[i]][e[i]]=temp;
            if(dl+temp<maxl)
            {
                if(min_p>dl+temp)
                {
                    min_p=dl+temp;
                    z=e[i];
                    for(j=1;j<=n;j++)p[j]=pred[j];
                 }
                pr=1;
            }
        }

        if(!pr)cout<<"No solution.";
        else
        {
            cout<<z<<" ";
            while(z!=p[z]){z=p[z];cout<<z<<" ";}
        }

        cout<<endl;
        min_p=100000;
        pr=0;
    }

    return 0;
}

I think i use right massiv limits :)