标签:
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 17645 Accepted Submission(s): 4281
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<cstdlib> #include<queue> #include<vector> #include<stack> using namespace std; #define INF 100000000 int tt,n,m,k,sx,sy,ex,ey; int dx[4]={0,0,-1,1}; int dy[4]={1,-1,0,0}; char s[105][105]; bool vis[105][105]; int w[105][105]; struct node { int x,y; }; bool check(int x,int y) { if(x<0||y<0||x>=n||y>=m) return false; return true; } void bfs() { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) w[i][j]=INF; } queue<node> q; node fr,nt; fr.x=sx,fr.y=sy; w[sx][sy]=-1; q.push(fr); while(!q.empty()) { fr=q.front(),q.pop(); if(fr.x==ex&&fr.y==ey&&w[fr.x][fr.y]<=k) { printf("yes\n"); return ; } for(int i=0;i<4;i++) { nt.x=fr.x+dx[i]; nt.y=fr.y+dy[i]; while(check(nt.x,nt.y)) { if(s[nt.x][nt.y]==‘*‘) break; if(w[nt.x][nt.y]<w[fr.x][fr.y]+1) break; w[nt.x][nt.y]=w[fr.x][fr.y]+1; if(w[nt.x][nt.y]>k) break; if(w[nt.x][nt.y]==k&&nt.x!=ex&&nt.y!=ey) break; q.push(nt); nt.x+=dx[i]; nt.y+=dy[i]; } } } printf("no\n"); } int main() { scanf("%d",&tt); while(tt--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",s[i]); scanf("%d%d%d%d%d",&k,&sy,&sx,&ey,&ex); sx--,sy--,ex--,ey--; bfs(); } return 0; }
标签:
原文地址:http://www.cnblogs.com/a972290869/p/4396895.html