HDU-1728逃离迷宫

//参考别人代码会的。。。。。

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; }


你可能感兴趣的:(HDU-1728逃离迷宫)