ai2790-迷宫-C语言-递归算法

算法丑陋,时间略长,还望指教。

#include <stdio.h>
#include <stdlib.h>
int flag;
void findway(int size,char*a,char*b,int ay,int ax,int by,int bx)//在a位置寻找走向b的下一步
{
    int side=size-2;//真实迷宫的大小
    //输入问题
    if(*a=='#'||*b=='#')
        return;
    //找到的判断
    if((by==ay&&(bx==ax-1||bx==ax+1))||(bx==ax&&(by==ay+1||by==ay-1))||(by==ay&&ax==bx))
    {
        flag=1;
        return;
    }
    //必然找不到的情况
    if(*(a+1)=='#'&&*(a-1)=='#'&&*(a+size)=='#'&&*(a-size)=='#')
        return;
    //还有希望的情况
    else
    {
        *a='#';//反正是废了
        if(*(a+size)=='.')
                findway(size,a+size,b,ay+1,ax,by,bx);
        if(*(a-size)=='.')
                findway(size,a-size,b,ay-1,ax,by,bx);
        if(*(a-1)=='.')
                findway(size,a-1,b,ay,ax-1,by,bx);
        if(*(a+1)=='.')
                findway(size,a+1,b,ay,ax+1,by,bx);
    }
}
int main()
{
    int number,i,j;
    scanf("%d",&number);
    int size[number];
    int res[number];
    for(i=0;i<number;i++)
    {
        flag=0;
        scanf("%d",&size[i]);//读入第i+1个迷宫的大小
        size[i]+=2;
        char maze[size[i]][size[i]];
        for(j=1;j<size[i]-1;j++)
            scanf("%s",&maze[j][1]);
        for(j=0;j<size[i];j++)
            maze[0][j]=maze[size[i]-1][j]='#';
        for(j=1;j<size[i]-1;j++)
            maze[j][0]=maze[j][size[i]-1]='#';
        int ay,ax,by,bx;
        scanf("%d",&ay);
        scanf("%d",&ax);
        scanf("%d",&by);
        scanf("%d",&bx);
        ay++;
        ax++;
        by++;
        bx++;
        findway(size[i],&maze[ay][ax],&maze[by][bx],ay,ax,by,bx);
        res[i]=flag;
    }
    for(i=0;i<number;i++)
        res[i]?(printf("YES\n")):(printf("NO\n"));
    return 0;
}

    原文作者:递归算法
    原文地址: https://blog.csdn.net/OrdinaryCrazy/article/details/70214511
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞