1 条题解

  • 0
    @ 2025-4-14 18:41:37

    C :

    #include<stdio.h>
    #include<string.h>
    char a[202][202];
    int b[202][202];
    int n,m,sum;
    void dfs(int x,int y,int t)
    {
        if(a[x][y]=='a'&&t<sum)
            sum=t;
        if(!b[x][y]&&a[x][y]!='#'&&x-1>=0)
        {
            b[x][y]=1;
            if(a[x][y]=='x')
            dfs(x-1,y,t+2);
            else dfs(x-1,y,t+1);
            b[x][y]=0;
    
        }
        if(!b[x][y]&&a[x][y]!='#'&&x+1<n)
        {
            b[x][y]=1;
            if(a[x][y]=='x')
            dfs(x+1,y,t+2);
            else dfs(x+1,y,t+1);
            b[x][y]=0;
    
        }
        if(!b[x][y]&&a[x][y]!='#'&&y-1>=0)
        {
            b[x][y]=1;
            if(a[x][y]=='x')
            dfs(x,y-1,t+2);
            else dfs(x,y-1,t+1);
            b[x][y]=0;
    
        }
        if(!b[x][y]&&a[x][y]!='#'&&y+1<m)
        {
            b[x][y]=1;
            if(a[x][y]=='x')
            dfs(x,y+1,t+2);
            else dfs(x,y+1,t+1);
            b[x][y]=0;
        }
    }
    int main()
    {
        int i,j,x1,x2,y1,y2;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            getchar();
            for(i=0;i<n;i++)
            {
                for(j=0;j<m;j++)
                {
                    scanf("%c",&a[i][j]);
                    if(a[i][j]=='r') x1=i,y1=j;
                    if(a[i][j]=='a') x2=i,y2=j;
                }
                getchar();
            }
            memset(b,0,sizeof(b));
            sum=999999;
            dfs(x1,y1,0);
            if(sum==999999) printf("I'm so sorry, but I can fly! bye~\n");
            else printf("%d\n",sum);
        }
        return 0;
    }
    
    

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    
    using namespace std;
    
    int n, m;
    char mp[205][205];
    bool v[205][205];
    int mv[4][2] =
    {
        1, 0,
        0, 1,
        0, -1,
        -1, 0
    };
    
    struct Node
    {
        int x;
        int y;
        int tep;
        Node(int tx, int ty, int tep)
        {
            x = tx;
            y = ty;
            this -> tep = tep;
        }
        Node(){}
    };
    
    int bfs(int sx, int sy)
    {
        queue<Node> Q;
        Node node(sx, sy, 0);
        Node temp;
        Q.push(node);
        int x, y, tep;
        while(!Q.empty())
        {
            temp = Q.front();
            Q.pop();
            x = temp.x;
            y = temp.y;
            tep = temp.tep;
    //        printf("x = %d y = %d tep = %d\n", x, y, tep);
            if(mp[x][y] == 'a')
            {
                return tep;
            }
            if(mp[x][y] == 'x')
            {
                mp[x][y] = '.';
                Node p(x, y, tep + 1);
                Q.push(p);
                continue;
            }
            for(int i = 0; i < 4; i++)
            {
                int tx = x + mv[i][0];
                int ty = y + mv[i][1];
                if(tx <0 || ty < 0 || tx >= n || ty >= m)
                {
                    continue;
                }
                if(!v[tx][ty] && mp[tx][ty] != '#')
                {
                    v[tx][ty] = true;
                    Node p(tx, ty, tep + 1);
                    Q.push(p);
                }
            }
        }
        return 0;
    }
    
    int main()
    {
    //    freopen("in.txt", "r", stdin);
    //    freopen("out.txt", "w", stdout);
        while(cin >> n >> m)
        {
            int sx, sy;
            memset(v, false, sizeof(v));
            for(int i = 0; i < n; i++)
            {
                for(int k = 0; k < m; k++)
                {
                    cin >> mp[i][k];
                    if(mp[i][k] == 'r')
                    {
                        sx= i;
                        sy = k;
                    }
                }
            }
            int t = bfs(sx, sy);
            if(t)
            {
                printf("%d\n", t);
            }
            else
            {
                printf("I'm so sorry, but I can fly! bye~\n");
            }
        }
        return 0;
    }
    
    
    • 1

    信息

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