//参考别人代码会的。。。。。
AC代码:
#include<stdio.h> #include<string.h> #define N 105 #define INF 0x3f3f3f3f char map[N][N]; int x_move[4]={1,0,-1,0}; int y_move[4]={0,-1,0,1}; int wan[N][N]; int ex,ey,k,m,n; int ok; void dfs(int x,int y,int F) { if(x==ex&&y==ey) { if(wan[x][y]<=k) { ok=1; } return; } if(wan[x][y]>k) { return; } if(wan[x][y]==k&&x!=ex&&y!=ey) { return; } for(int i=0;i<4;i++) { int tx=x+x_move[i]; int ty=y+y_move[i]; if(tx<0||tx>=m||ty<0||ty>=n) continue; if(map[tx][ty]=='*'||wan[tx][ty]<wan[x][y]) continue; if(F!=-1&&F!=i&&wan[tx][ty]<wan[x][y]+1) continue; wan[tx][ty]=wan[x][y]; if(F!=-1&&F!=i) wan[tx][ty]++; dfs(tx,ty,i); if(ok) return; } } int main() { int x; scanf("%d",&x); while(x--) { int sx,sy; scanf("%d%d",&m,&n); int i,j; for(i=0;i<m;i++) { scanf("%s",map[i]); } scanf("%d%d%d%d%d",&k,&sy,&sx,&ey,&ex); sy--,sx--,ex--,ey--; for(i=0;i<m;i++) { for(j=0;j<n;j++) { wan[i][j]=INF; } } ok=0; wan[sx][sy]=0; dfs(sx,sy,-1); if(ok) { printf("yes\n"); } else { printf("no\n"); } } return 0; }