3 条题解

  • 4
    @ 2023-7-24 21:26:30

    还算简单

    已AC,放心食用
    #include <bits/stdc++.h>
    using namespace std;
    int n,m,n1,m1,n2,m2,d=0;//n行m列 
    char a[100][100];//保存二维数组
    int e[4][2]={{0,1},{0,-1},{1,0},{-1,0}};//分别表示上下左右
    void fun(int x,int y)
    {
    	if(d==1)
    	{
    		return;
    	}
    	if(x==n2&&y==m2)
    	{
    		d=1;
    		return;
    	} 
    	for(int i=0;i<4;i++)//循环判断上下左右 
    	{
    		int x1=x+e[i][0];//计算下一个点的坐标 
    		int y1=y+e[i][1];//计算下一个点的坐标 
    		if(x1>=0&&y1>=0&&x1<n&&y1<n&&a[x1][y1]!='#')//判断边界,判断是否访问过,判断是否可以通过 
    		{
    			a[x1][y1]='#';//走过就标记为不能走 
    			fun(x1,y1);//进入下一个点
    		}
    	} 
    } 
    int main()
    {
    	cin>>m;
    	while(m--)
    	{
    		cin>>n;
    		for(int i=0;i<n;i++)
    		{
    			for(int k=0;k<n;k++)
    			{
    				cin>>a[i][k];
    			}
    		}
    		cin>>n1>>m1>>n2>>m2;
    		d=0;
    		if(a[n1][m1]=='#'||a[n2][m2]=='#')
    		{
    			cout<<"NO"<<endl;
    			continue;
    		 } 
    		fun(n1,m1);
    		if(d==1)
    			cout<<"YES"<<endl;
    		else
    			cout<<"NO"<<endl;
    	}
    	return 0;
    }
    
    
    • 1
      @ 2024-3-26 21:26:30
      #include <bits/stdc++.h>
      using namespace std;
      int n,m;
      int x,y,x2,y2;
      char a[110][110];
      int fx[5]={0,0,1,0,-1};
      int fy[5]={0,1,0,-1,0};
      bool flag;
      void dfs(int x,int y){
      	a[x][y]='#';
      	if (x==x2&&y==y2){
      		cout<<"YES"<<endl;
      		flag=true;
      		return;
      	}
      	for (int i=1;i<=4;i++){
      		int tx=fx[i]+x;
      		int ty=fy[i]+y;
      		
      		if (tx>=0&&tx<m&&ty>=0&&ty<m&&a[tx][ty]=='.'&&!flag)dfs(tx,ty);
      	}
      }
      int main(){
      	cin>>n;
      	for (int k=1;k<=n;k++){
      		flag=false;
      		cin>>m;
      		for (int i=0;i<m;i++){
      			for (int j=0;j<m;j++)cin>>a[i][j];
      		}
      		cin>>x>>y>>x2>>y2;
      		if (a[x][y]=='#'||a[x2][y2]=='#'){
      			cout<<"NO"<<endl;
      			continue;
      		}
      		dfs(x,y);
      		if (!flag)cout<<"NO"<<endl;
      	}
      	return 0;
      }
      
      • 0
        @ 2024-3-17 12:14:12
        #include <iostream>
        #include <vector>
        
        bool canReachDestination(std::vector<std::vector<char>>& maze, int n, int ha, int la, int hb, int lb) {
            if (ha < 0 || ha >= n || la < 0 || la >= n || hb < 0 || hb >= n || lb < 0 || lb >= n || maze[ha][la] == '#' || maze[hb][lb] == '#') {
                return false;
            }
        
            if (ha == hb && la == lb) {
                return true;
            }
        
            maze[ha][la] = '#';
        
            if (canReachDestination(maze, n, ha - 1, la, hb, lb) || 
                canReachDestination(maze, n, ha + 1, la, hb, lb) ||
                canReachDestination(maze, n, ha, la - 1, hb, lb) ||
                canReachDestination(maze, n, ha, la + 1, hb, lb)) {
                return true;
            }
        
            return false;
        }
        
        int main() {
            int k;
            std::cin >> k;
        
            for (int i = 0; i < k; ++i) {
                int n;
                std::cin >> n;
        
                std::vector<std::vector<char>> maze(n, std::vector<char>(n));
                for (int j = 0; j < n; ++j) {
                    for (int l = 0; l < n; ++l) {
                        std::cin >> maze[j][l];
                    }
                }
        
                int ha, la, hb, lb;
                std::cin >> ha >> la >> hb >> lb;
        
                if (canReachDestination(maze, n, ha, la, hb, lb)) {
                    std::cout << "YES" << std::endl;
                } else {
                    std::cout << "NO" << std::endl;
                }
            }
        
            return 0;
        }
        

        函数AC解法

        • 1

        信息

        ID
        2049
        时间
        1000ms
        内存
        128MiB
        难度
        4
        标签
        (无)
        递交数
        186
        已通过
        92
        上传者