1 条题解
-
0
大白话思路
从起点做广度或深度优先搜索,只进入合法且未访问的空地,遇到墙或越界就停止扩展。能抵达终点输出可达,否则输出不可达;每组测试清空访问状态。至多访问 n² 个格子,时间与空间均 O(n²)。
C++17 标准解
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #define N 101 using namespace std; char ch; int n,xa,ya,xb,yb; bool flag; int vis[N][N]; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void dfs(int x,int y) { for(int i=0;i<4;i++) { int nx=x+dir[i][0]; int ny=y+dir[i][1]; if(nx>=0&&nx<n&&ny>=0&&ny<n&&vis[nx][ny]==0) { vis[nx][ny]=1; if(nx==xb&&ny==yb) { cout<<"YES"<<endl; flag=true; break; } else dfs(nx,ny); } } } int main() { int k; cin>>k; while(k--) { memset(vis,0,sizeof(vis)); flag=false; cin>>n; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { cin>>ch; if(ch=='#') vis[i][j]=1; } cin>>xa>>ya; cin>>xb>>yb; if(vis[xa][ya]||vis[xb][yb]) { cout<<"NO"<<endl; continue; } else dfs(xa,ya); if(!flag) cout<<"NO"<<endl; } return 0; }来源:HEEKDragonOne/ACM,一本通 1215;固定提交 29b5b378f6257c2d9ba99452d0f5b770a26c826c。仅赛后开放。
- 1
信息
- ID
- 1008
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 9
- 标签
- 递交数
- 17
- 已通过
- 2
- 上传者
