4 条题解

  • 0
    @ 2026-3-20 12:54:29

    就深搜就彳亍了

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e3+10;
    char a[N][N];
    int k,n,m,xa,xb,ya,yb,flag;
    int dx[]={1,0,-1,0};
    int dy[]={0,1,0,-1};
    void dfs(int x,int y){
    	for(int i=0;i<4;i++){
    		int nx=x+dx[i];
    		int ny=y+dy[i];
    		if(nx>0&&nx<=n&&ny>0&&ny<=n&&a[nx][ny]=='.'){
    			a[nx][ny]='#';
    			if(nx==xb&&ny==yb){
    				flag=1;
    				return;
    			}
    			dfs(nx,ny);
    		}
    	}
    }
    int main(){
    	cin>>k;
    	while(k--){
    		cin>>n;
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=n;j++){
    				cin>>a[i][j];
    			}
    		}
    		cin>>xa>>ya>>xb>>yb;
    		xa++;
    		ya++;
    		xb++;
    		yb++;
    		flag=0;
    		dfs(xa,ya);
    		if(flag==0)
    		    cout<<"NO"<<endl;
    		else cout<<"YES"<<endl;
    	}
    	return 0;
    }
    
    • 0
      @ 2025-8-20 14:39:14

      纯GCC版:

      #include <stdio.h>
      int t, n, sx, sy, ex, ey, xx, yy, dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};
      char a[100][100];
      short flag;
      short check(int x, int y)
      {
      	return x >= 0 && x < n && y >= 0 && y < n && a[x][y] == '.';
      }
      void dfs(int sx, int sy)
      {
      	if(sx == ex && sy == ey)
      	{
      		flag = 1;
      		return;
      	}
      	a[sx][sy] = '#';
      	for(int i = 0; i < 4; i ++)
      	{
      		xx = sx + dx[i];
      		yy = sy + dy[i];
      		if(check(xx, yy))
      			dfs(xx, yy);
      	}
      	return;
      }
      int main()
      {
      	scanf("%d\n", &t);
      	while(t --)
      	{
      		scanf("%d\n", &n);
      		for(int i = 0; i < n; i ++)
      			scanf("%s", &a[i]);
      		scanf("%d %d %d %d\n", &sx, &sy, &ex, &ey);
      		dfs(sx, sy);
      		puts(flag ? "YES" : "NO");
      		flag = 0;
      	}
      	return 0;
      }
      
      • 0
        @ 2023-8-25 14:54:44

        dfs版:

        #include <iostream>
        #include <cstring> 
        using namespace std;
        struct point{
        	int x,y;
        }; 
        point s,t;
        int n;
        char a[110][110];
        bool vis[110][110];
        bool flag=false;
        int d[][2]={{-1,0},{1,0},{0,-1},{0,1}};
        void dfs(point p){
        	if(p.x==t.x&&p.y==t.y){
        		flag=true;
        		return;
        	}
        	for(int i=0;i<4;i++){
        		point nxt;
        		nxt.x=p.x+d[i][0];
        		nxt.y=p.y+d[i][1];
        		if(nxt.x<1||nxt.x>n||nxt.y<1||nxt.y>n)continue;
        		if(a[nxt.x][nxt.y]=='.'&&!vis[nxt.x][nxt.y]){
        			vis[nxt.x][nxt.y]=1;
        			dfs(nxt);
        		}
        	}
        } 
        int main(){
        	int T;
        	cin>>T;
        	while(T--){
        		cin>>n;
        		for(int i=1;i<=n;i++){
        			for(int j=1;j<=n;j++){
        				cin>>a[i][j];
        			}
        		}
        		cin>>s.x>>s.y>>t.x>>t.y;
        		s.x++;s.y++;t.x++;t.y++;
        		flag=false;
        		memset(vis,0,sizeof vis);
        		vis[s.x][s.y]=1;
        		dfs(s);
        		if(flag)cout<<"YES"<<endl;
        		else cout<<"NO"<<endl;
        	}
        	return 0;
        }
        

        bfs版:

        #include <iostream>
        #include <cstring> 
        #include <queue>
        using namespace std;
        struct point{
        	int x,y;
        }; 
        point s,t;
        int n;
        char a[110][110];
        bool vis[110][110];
        bool flag=false;
        int d[][2]={{-1,0},{1,0},{0,-1},{0,1}};
        void bfs(point s){
        	queue<point>q;
        	q.push(s);
        	vis[s.x][s.y]=1;
        	while(!q.empty()){
        		point p=q.front();
        		q.pop();
        		if(p.x==t.x&&p.y==t.y){
        			flag=true;
        			return;
        		}
        		for(int i=0;i<4;i++){
        			point nxt;
        			nxt.x=p.x+d[i][0];
        			nxt.y=p.y+d[i][1];
        			if(nxt.x<1||nxt.x>n||nxt.y<1||nxt.y>n)continue;
        			if(a[nxt.x][nxt.y]=='.'&&!vis[nxt.x][nxt.y]){
        				vis[nxt.x][nxt.y]=1;
        				q.push(nxt);
        			}
        		}
        	}
        
        } 
        int main(){
        	int T;
        	cin>>T;
        	while(T--){
        		cin>>n;
        		for(int i=1;i<=n;i++){
        			for(int j=1;j<=n;j++){
        				cin>>a[i][j];
        			}
        		}
        		cin>>s.x>>s.y>>t.x>>t.y;
        		s.x++;s.y++;t.x++;t.y++;
        		flag=false;
        		memset(vis,0,sizeof vis);
        		vis[s.x][s.y]=1;
        		bfs(s);
        		if(flag)cout<<"YES"<<endl;
        		else cout<<"NO"<<endl;
        	}
        	return 0;
        }
        
        • -3
          @ 2024-7-19 11:47:22
          #include<iostream>
          #include<cstring>
          using namespace std;
          const int N=1e3+520;
          int n,t,sx,sy,ex,ey;
          char a[N][N];
          int dx[]={0,0,1,-1};
          int dy[]={1,-1,0,0};
          bool flag;
          bool check(int x,int y){
          	if(x>=0&&x<n&&y>=0&&y<n&&a[x][y]=='.')
          		return 1;
          		
          	return 0;
          }
          void dfs(int x,int y){
          	if(x==ex&&y==ey){
          		flag=1;
          		return ;
          	}
          	for(int i=0;i<=3;i++){
          		int xx=x+dx[i];
          		int yy=y+dy[i];
          		if(check(xx,yy)){
          			a[xx][yy]='#';
          			dfs(xx,yy);
          		}
          	}
          }
          int main(){
          	cin>>t;
          	while(t--){
          		cin>>n;
          		for(int i=0;i<n;i++){
          			for(int j=0;j<n;j++){
          				cin>>a[i][j];
          			}
          		}
          		cin>>sx>>sy>>ex>>ey;
          		dfs(sx,sy);
          		if(flag){
          			cout<<"YES"<<endl;
          		}else{
          			cout<<"NO"<<endl;
          		}
          		flag=0;
          	}
          	return 0;
          }
          
          • 1

          信息

          ID
          3023
          时间
          1000ms
          内存
          256MiB
          难度
          6
          标签
          递交数
          134
          已通过
          44
          上传者