bfs 这道题貌似要求不能停下来的~~
vis用三维的 想想就明白了
#include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; char map[105][105]; int xx[4]={0,1,0,-1}; int yy[4]={1,0,-1,0}; int vis[105][105][12]; int r,c,k; struct node { int x,y,d; node(int x1,int y1,int d1) { x=x1; y=y1; d=d1; } }; int bfs(int x,int y) { vis[x][y][0]=1; queue<node> q; q.push(node(x,y,0)); while(!q.empty()) { node t=q.front(); q.pop(); x=t.x; y=t.y; int time=t.d; if(map[x][y]=='G') return t.d; int i; for(i=0;i<4;i++) { int tx=x+xx[i]; int ty=y+yy[i]; if(tx<0||tx>=r||ty<0||ty>=c) continue; if(vis[tx][ty][(time+1)%k]) continue; vis[tx][ty][(time+1)%k]=1; if(map[tx][ty]=='#') { if((time+1)%k==0) q.push(node(tx,ty,time+1)); } else q.push(node(tx,ty,time+1)); } } return -1; } int main() { int t; scanf("%d",&t); int cas=0; for(cas=0;cas<t;cas++) { scanf("%d%d%d",&r,&c,&k); int i,j; int sx,sy; memset(vis,0,sizeof(vis)); for(i=0;i<r;i++) { scanf("%s",map[i]); for(j=0;j<c;j++) if(map[i][j]=='Y') sx=i,sy=j; } int temp=bfs(sx,sy); if(temp==-1) printf("Please give me another chance!\n"); else printf("%d\n",temp); } return 0; }