简单是简单,就是输入贼(t+m%s%%b%)+/+..
大家做的时候小心点就好,还有这样例是神仙!
代码如下:
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> pi; const int N=105; char a[N][N]; int dis[N][N]; bool vis[N][N]; const int dx[8]= {1,-1,0,0,1,-1,1,-1}; const int dy[8]= {0,0,1,-1,1,-1,-1,1}; int n,m,ans=-1; bool ck() { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]!='*'&&!vis[i][j]) return false; } } return true; } bool c(int x,int y) { if(x>n||x<1||y>m||y<1||a[x][y]=='*') return false; return true; } int bfs(pi start) { queue<pi>q; q.push(start); dis[start.first][start.second]=0; vis[start.first][start.second]=true; while(q.size()) { auto temp=q.front(); q.pop(); for(int i=0;i<8;i++) { int ix=temp.first+dx[i],iy=temp.second+dy[i]; if(c(ix,iy)&&!vis[ix][iy]) { q.push({ix,iy}); dis[ix][iy]=dis[temp.first][temp.second]+1; vis[ix][iy]=true; ans=max(ans,dis[ix][iy]); if(ck()) return ans; } } } } int main() { pi start; int sx,sy; cin>>m>>n>>sy>>sx; for(int i=n;i>=1;i--) { for(int j=1;j<=m;j++) { cin>>a[i][j]; } } start={sx,sy}; cout<<bfs(start)<<endl; return 0; }