Функция, использующая рекурсию, чтобы пройти лабиринт - C (СИ)

Формулировка задачи:

Помогите пожалуйста найти и исправить ошибку. Есть задача :" Напишите функцию,которая получает массив символов 8х8, представляющих собой лабиринт.Найдите хотя бы один путь через него, с началом в точке (0,1) и концом в точке(7,7), с помощью рекурсии! Если пути не существует ,то выведите соответствующее сообщение. После заупска и ввода лабиринта зацикливается на: Вправо Вправо Вправо....
#include<stdio.h>
#include<stdlib.h>
 
void 
travel(const  char a[][8]);
 
int 
main(void)
{   
    int i,j;
    char a[8][8];
    
    printf("Введите последовательность из х и 0>");
    
    for(i=0;i<8;i++)
    {
       for(j=0;j<8;j++)
         scanf ("%c",&a[i][j]);
    }
    
    printf("\n");
    
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
            printf("%c",a[i][j]);
        printf("\n");
    }
    
    travel(a);
 
    system ("pause");
    return 0;
}
 
 
void
travel(const char a[][8])
{
    int b=0,c=1;
    
    if ((b==7) && (c==7))
     printf ("Финиш");
    else
    {
        if(a[b][c+1]=='0')
        {
           printf ("Вправо\n");
           c=c+1;
           travel (a);         
        }
        else
        {
             if(a[b+1][c]=='0')
             {
                printf("Вниз\n");
                b=b+1;
                travel(a);
             }
             else
             {
                 if(a[b][c-1]=='0')
                 {
                   printf ("Влево\n");
                   c=c-1;
                   travel(a);
                 }
                 else 
                 {
                     if(a[b-1][c]=='0')
                     {
                            printf ("Вверх\n");
                            b=b-1;
                            travel(a);
                     }
                     else
                      printf ("Пути нет");
                 }
             }
        }
    }
}

Код к задаче: «Функция, использующая рекурсию, чтобы пройти лабиринт - C (СИ)»

textual
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
 
int 
travel(const char a[][8], int b, int c, int v[][8]);
 
int 
main(void)
{
    int i,j;
    char a[8][8];
    int v[8][8];
 
    setlocale(LC_ALL, "Russian");
 
#if (1)
    // если лень вводить каждый раз
    char lab[] =
    "x0xxxxxx"
    "x0xx000x"
    "x0xx0x0x"
    "x0000x0x"
    "x0xx0x0x"
    "x0000x0x"
    "x0xxxx00"
    "x0xxxxx0";
    memcpy(a, lab, sizeof(a));
 
#else
    printf("Введите последовательность из х и 0>");
    
    for(i=0;i<8;i++)
    {
       for(j=0;j<8;j++)
         scanf ("%c",&a[i][j]);
    }
#endif
    
    printf("\n");
    
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
            printf("%c",a[i][j]);
        printf("\n");
    }
 
    memset(v, 0, sizeof(v));
    printf("%s\n", travel(a, 0, 1, v) ? "финиш" : "выхода нет!" );
 
    system ("pause");
    return 0;
}
 
int travel(const char a[][8], int b, int c, int v[][8]) {
    int ret = 0;
    v[b][c] = 1;
    if (b == 7 && c == 7) return 1;
    if (b < 7 && a[b+1][c] == '0' && v[b+1][c] == 0) {
        printf("вниз %d:%d\n", b+1, c);
        ret = travel(a, b + 1, c, v);
        if (!ret) printf("возврат %d:%d\n", b, c);
    }
    if (!ret && c < 7 && a[b][c+1]=='0'&& v[b][c+1] == 0) {
        printf ("вправо %d:%d\n", b, c+1);
        ret = travel(a, b, c+1, v);
        if (!ret) printf("возврат %d:%d\n", b, c);
    }
    if (!ret && c > 0 && a[b][c-1]=='0' && v[b][c-1] == 0) {
        printf ("влево %d:%d\n", b, c-1);
        ret = travel(a, b, c-1, v);
        if (!ret) printf("возврат %d:%d\n", b, c);
    }
    if (!ret && b > 0 && a[b-1][c]=='0' && v[b-1][c] == 0) {
        printf ("вверх %d:%d\n", b-1, c);
        ret = travel(a, b-1, c, v);
        if (!ret) printf("возврат %d:%d\n", b, c);
    }
    return ret;
}

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

12   голосов, оценка 4.417 из 5


СОХРАНИТЬ ССЫЛКУ