牛客 網易筆試題2017 簡單bfs
阿新 • • 發佈:2019-02-14
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <queue> using namespace std; int n,m,k; char graph[55][55]; int dx[55],dy[55]; bool vis[55][55]; int step[55][55]; int sx,sy; struct node{ int x,y; int step; }; void bfs(){ queue<node> q; node tmp; tmp.x = sx; tmp.y = sy; graph[sx][sy] = 'X'; int res = 0; tmp.step = 0; q.push(tmp); while(!q.empty()){ node cur = q.front(); q.pop(); for(int i=0;i<k;i++){ int xx = cur.x+dx[i]; int yy = cur.y+dy[i]; if(xx>=0 && xx<n && yy>=0 && yy<m && graph[xx][yy]=='.'){ graph[xx][yy] = 'X'; node t; t.x = xx; t.y = yy; t.step = cur.step+1; step[xx][yy] = t.step; q.push(t); res = max(res,t.step); } } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(graph[i][j]=='.'){ printf("-1\n"); return ; } } } printf("%d\n",res); } int main(){ scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",graph[i]); scanf("%d%d",&sx,&sy); memset(vis,false,sizeof(vis)); memset(step,0,sizeof(step)); scanf("%d",&k); for(int i=0;i<k;i++){ scanf("%d%d",dx+i,dy+i); } bfs(); return 0; }