• wyh的迷宫(水题)


    题目描述 

    给你一个n*m的迷宫,这个迷宫中有以下几个标识:

    s代表起点

    t代表终点

    x代表障碍物

    .代表空地

    现在你们涵哥想知道能不能从起点走到终点不碰到障碍物(只能上下左右进行移动,并且不能移动到已经移动过的点)。

    输入描述:

    输入第一行一个整数T(1<=T<=10)
    接下来有T组测试数据,对于每一组测试数据,第一行输入2个数n和m(1<=n,m<=500)
    接下来n行,每行m个字符代表这个迷宫,每个字符都是上面4个中的一种
    数据保证只有一个起点和一个终点

    输出描述:

    对于每一组测试数据,如果可以的话输出YES,不可以的话输出NO
    示例1

    输入

    1
    3 5
    s...x
    x...x
    ...tx

    输出

    YES

    简单的Bfs,不说啥直接上代码

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<queue> 
    using namespace std;
    const int maxn = 550;
    char map[maxn][maxn];
    int vis[maxn][maxn];
    int n,m;
    int k[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
    int x1,y3,x2,y2;
    struct node
    {
    	int x,y;
    	node(int _x,int _y)
    	{
    		x = _x;
    		y = _y;
    	}
    };
    int bfs()
    {
    	queue<node>que;
    	que.push(node(x1,y3));
    	vis[x1][y3] = 1;
    	while(!que.empty())
    	{
    		node q = que.front();
    		que.pop();
    		for(int i = 0;i<4;i++)
    		{
    			node v = q;
    			v.x += k[i][0];
    			v.y += k[i][1];
    			if(v.x==x2 && v.y == y2) return 1;
    			if(map[v.x][v.y] == '.' && !vis[v.x][v.y] &&v.x>=0&&v.y<m&&v.x<n&&v.y>=0)
    			{
    				vis[v.x][v.y]  = 1;
    				que.push(node(v.x,v.y));
    			}
    		 } 
    	}
    	return 0;
    }
    int main()
    {
    	int t;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>m;
    		getchar();
    		for(int i = 0;i<n;i++)
    		{
    			for(int j = 0;j<m;j++)
    			{
    				scanf("%c",&map[i][j]);
    				if(map[i][j] == 's')
    				{
    					x1 = i;
    					y3 = j;
    				}
    				else if(map[i][j] == 't')
    				{
    					x2 = i;y2 = j;
    				}
    			}
    			getchar();
    		 } 
    		 memset(vis,0,sizeof(vis));
    		int ans = bfs();
    		if(ans) printf("YES
    ");
    		else printf("NO
    ");
    	}
    	return 0;
    }

    在牛客网上用y1编译过不去,所以我用了y3代替;

    题目链接点击打开链接

  • 相关阅读:
    帆软学习之开始
    「csp模拟」模拟测试11
    「csp模拟」模拟测试4
    「csp模拟」模拟测试3
    「csp模拟」模拟测试2
    「csp模拟」模拟测试1
    layui表格中日期格式的处理,从数字变日期格式
    Layui下拉框的事件和表格的刷新
    Layui的下拉框
    Layui按钮的禁用和恢复
  • 原文地址:https://www.cnblogs.com/Nlifea/p/11746054.html
Copyright © 2020-2023  润新知