2 条题解

  • 0
    @ 2025-10-18 20:45:39

    #include<stdio.h>

    #include<queue>

    using namespace std;

    char map[1005][1005];

    int vis[1005][1005] = {0};

    int dx[4] = {-1,0,1,0};

    int dy[4] = {0,-1,0,1};

    struct p

    {

    int x,y,ans;

    }b,t;

    queue

    q;

    int n,m;

    int m1,m2;

    void bfs()

    {

    vis[b.x][b.y] = 1;

    while(!q.empty())

    {

    b = q.front();

    q.pop();

    if(b.x == m1 && b.y == m2)

    {

    printf("宿主可成功逃脱,最快逃脱步数为 %d 步

    \n",b.ans);

    return;

    }

    for(int i=0;i<4;i++)

    {

    int nex = b.x + dx[i];

    int ney = b.y + dy[i];

    if(nex >=1 && nex <=n && ney >=1 && ney

    <=m && vis[nex][ney] == 0 && map[nex]

    [ney] != '*')

    {

    vis[nex][ney] = 1;

    t.x = nex,t.y = ney,t.ans = b.ans+1;

    q.push(t);

    }

    }

    }

    printf("宿主任务失败,宣告死亡\n");

    }

    int main()

    {

    scanf("%d %d",&n,&m);

    for(int i=1;i<=n;i++)

    {

    for(int j=1;j<=m;j++)

    {

    scanf(" %c",&map[i][j]);

    if(map[i][j] == 'T')

    {

    m1 = i;

    m2 = j;

    }

    if(map[i][j] == 'S')

    {

    b.x = i;

    b.y = j;

    b.ans = 0;

    }

    }

    }

    q.push(b);

    bfs();

    return 0;

    }

    信息

    ID
    1055
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    201
    已通过
    26
    上传者