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

Обсуждение задачи 1033. Лабиринт

help me
Послано win 9 фев 2003 05:43
#include<stdio.h>
#define x1 2
#define y1 1
long p_l=2,q[1330][3],n,l_s,x,y,p_f=1,wall=0;
char table[34][34];
f(long y,long x)
{
    q[p_l][x1]=x;
    q[p_l][y1]=y;
    p_l++;
    if(y<=n && x<=n-1 && x>=0 && y>=1)table[y][x]='o';
}
f_wall()
{

    while(p_l-p_f!=0)
    {
        x=q[p_f][x1];
        y=q[p_f][y1];
        p_f++;
        if(y>n || x>n-1 || x<0 || y<1)wall++;
        else
        {
            if(table[y-1][x]=='#')wall++;
            else if(table[y-1][x]!='o') f(y-1,x);

            if(table[y+1][x]=='#')wall++;
            else if(table[y+1][x]!='o')f(y+1,x);

            if(table[y][x-1]=='#')wall++;
            else if(table[y][x-1]!='o')f(y,x-1);

            if(table[y][x+1]=='#')wall++;
            else if(table[y][x+1]!='o')f(y,x+1);
        }
    }

}

main()
{
    FILE*fin=stdin
    FILE*fout=stdout
    long i,j,k;
    fscanf(fin,"%ld",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(fin,"%s",table[i]);
    }
    q[1][x1]=n-1;
    q[1][y1]=n;
    if(table[n][n-1]=='#')wall+=0;
    else
    {
        table[n][n-1]='o';
        f_wall();
        wall-=2;
    }
    p_f=1;
    p_l=2;
    q[1][x1]=0;
    q[1][y1]=1;
    if(table[1][0]=='#')wall+=0;
    else
    {
        table[1][0]='o';
        f_wall();
        wall-=2;
    }
        wall*=9;
        fprintf(fout,"%ld",wall);
    fclose(fin);
    fclose(fout);
}