一开始不会做,看了一下别人的题解 。主要思路是先不要拐弯,直接走一个方向直到要转弯为止!
直接贴我ac的代码吧!
还是弱鸡一枚啊。
#include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<string.h> using namespace std; struct node{ int x; int y; int k; }a,b; //queue<node> que; //node a,b; int n,m,y1,x1,y2,x2,f; int dx[]={0,1,0,-1}; int dy[]={1,0,-1,0}; int vis[110][110]; char maze[110][110]; int bfs(int x,int y) {int flag=0; queue<node> que; a.x=x;a.y=y;a.k=-1; vis[a.x][a.y]=1; que.push(a); while(que.size()) { a=que.front(); que.pop(); if(a.x==x2&&a.y==y2&&a.k<=f) { flag=1; break; } b.k=a.k+1; for(int i=0;i<4;i++) { int c=a.x+dx[i]; int d=a.y+dy[i]; while(c>=0&&c<n&&d>=0&&d<m&&maze[c][d]!='*') { if(!vis[c][d]) { vis[c][d]=1; b.x=c;b.y=d; que.push(b); } c=c+dx[i]; d=d+dy[i]; } } } if(flag==1) cout<<"yes"<<endl; else cout<<"no"<<endl; } int main() {int T; cin>>T; while(T--){ cin>>n>>m; memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cin>>maze[i][j];} cin>>f>>y1>>x1>>y2>>x2; y2=y2-1;x1=x1-1; x2=x2-1;y1=y1-1; bfs(x1,y1); } return 0; }