zcmu 1185: 走迷宫(bfs)

【题目】

1185: 走迷宫

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 354  Solved: 140
[Submit][Status][Web Board]

Description

给一张个迷宫,问能否从起点走到终点,只能往上下左右走,不能斜着走

Input

多组测试数据,每组第一行两个正整数,分别为n和m

表示n这个迷宫有n行m列(0<n,m<10)

接着是n行m列,

'#'表示路

‘*’表示墙

‘S’表示起点

‘T’表示终点

Output

每组测试数据输出一个结果,如果能从S走到T,输出“YES”,否则输出“NO”

Sample Input

2 2
S*
#T
3 3
S*#
#*T
##*

Sample Output

YES
NO

【题解】

挂起来做迷宫问题的板子。

【代码】

#include<bits/stdc++.h>
using namespace std;
const int dx[]={-1,0,1,0};
const int dy[]={0,1,0,-1};
int n,m,xx,yy;
char a[12][12];
int vis[12][12];
int f;
void bfs(int x,int y)
{
    vis[x][y]=1;
    if(x==xx&&y==yy)
    {
        f=1;
        return;
    }
    for(int i=0;i<4;i++)
    {
        int x1=x+dx[i];
        int y1=y+dy[i];
        if(x1>0&&y1>0&&x1<=n&&y1<=m&&vis[x1][y1]==0&&a[x1][y1]!='*')
            bfs(x1,y1);
    }
}
main()
{
    while(~scanf("%d%d",&n,&m))
    {
        int x,y;
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                scanf(" %c",&a[i][j]);
                if(a[i][j]=='S') x=i,y=j;
                if(a[i][j]=='T') xx=i,yy=j;
            }
        f=0;
        bfs(x,y);
        if(f) printf("YES\n");
        else printf("NO\n");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41117236/article/details/81507320