1 条题解

  • 0
    @ 2025-4-12 21:43:14

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<queue>
    #include<iostream>
    using namespace std;
    struct P
    {
        int x,y;
        int time;
    };
    bool map[15][15][4];
    char a[15][15];
    bool vis[15][15][4];
    int x[4]={1,0,-1,0};
    int y[4]={0,1,0,-1};
    int n,m;
    int bfs(P s,P e)
    {
        queue<P> q;
        q.push(s);
        vis[s.x][s.y][s.time]=1;
        bool flag=0;
        while(!q.empty())
        {
            P p=q.front();
            q.pop();
            //printf("%d-%d-%d\n",p.x,p.y,p.time);
            if(p.x==e.x&&p.y==e.y)
                return p.time;
            for(int i=0;i<4;i++)
            {
                int nx=p.x+x[i];
                int ny=p.y+y[i];
                if(nx>=0&&nx<n&&ny>=0&&ny<m&&!vis[nx][ny][(p.time+1)%4]&&!map[nx][ny][(p.time+1)%4])
                {
                    vis[nx][ny][(p.time+1)%4]=1;
                    P p1;
                    p1.x=nx;p1.y=ny;p1.time=p.time+1;
                    q.push(p1);
                }
            }
            int time=p.time+1;
            if(!map[p.x][p.y][(time)%4]&&!vis[p.x][p.y][(time)%4])
            {
                p.time++;
                q.push(p);
            }
        }
        return -1;
    }
    int main()
    {
        //freopen("F input.txt","r",stdin);
        //freopen("F output.txt","w",stdout);
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(int i=0;i<n;i++)
                scanf("%s",a[i]);
            P s,e;
            memset(map,0,sizeof(map));
            memset(vis,0,sizeof(vis));
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<m;j++)
                {
                  if(a[i][j]=='S')
                  {
                      s.x=i;
                      s.y=j;
                      s.time=0;
                  }
                  else if(a[i][j]=='E')
                  {
                      e.x=i;
                      e.y=j;
                  }
                  else if(a[i][j]=='D')
                  {
                      map[i][j][0]=1;
                      map[i-1][j][1]=1;
                      map[i-1][j+1][2]=1;
                      map[i][j+1][3]=1;
                  }
                }
            }
            int k=0;
            k=bfs(s,e);
            if(k!=-1)
            printf("%d\n",k);
            else printf("kill the dog,god wen!\n");
        }
    }
    
    • 1

    信息

    ID
    1353
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者