2 条题解

  • 2
    @ 2025-3-8 13:05:14
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e3+5;
    char a[N][N];
    int vis[N][N];
    int n,m,sx,sy,fx,fy;
    int dx[4]={-1,1,0,0};
    int dy[4]={0,0,-1,1};
    struct point{
    	int x,y;
    };
    queue <point> q;
    int bfs(int x,int y){
    	point p={x,y};
    	q.push(p);
    	while(!q.empty()){
    		point temp=q.front();
    		q.pop();
    		if(temp.x==fx && temp.y==fy) return vis[temp.x][temp.y]-1;
    		else{
    			for(int i=0;i<4;i++){
    				point np=temp;
    				np.x+=dx[i];
    				np.y+=dy[i];
    				if(np.x>=1 && np.x<=n && np.y>=1 && np.y<=n && a[np.x][np.y]=='0' && vis[np.x][np.y]==0){
    					q.push(np);
    					vis[np.x][np.y]=vis[temp.x][temp.y]+1;
    				}
    			}
    		}
    	}
    }
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++){
    			cin>>a[i][j];
    		}
    	}
    	cin>>sx>>sy>>fx>>fy;
    	vis[sx][sy]=1;
    	cout<<bfs(sx,sy)<<endl;
    	return 0;
    }

    信息

    ID
    5804
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    20
    已通过
    7
    上传者