zoukankan      html  css  js  c++  java
  • poj 3083 Children of the Candy Corn (广搜,模拟,简单)

    题目

    靠墙走用 模拟,我写的是靠左走,因为靠右走相当于 靠左走从终点走到起点。

    最短路径 用bfs。

    #define  _CRT_SECURE_NO_WARNINGS
    
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #define MAXN 110
    char map[MAXN][MAXN];
    int n,m;
    int xx[4]={0,1,0,-1};
    int yy[4]={1,0,-1,0};
    struct tt
    {
        int x,y,step;
    };
    
    int bfs(int x,int y,int x1,int y1)
    {
        int ans=0,i;
        tt front,rear,temp;
        queue<tt>q;
        while(!q.empty())
            q.pop();
        front.x=x,front.y=y,front.step=0;
        ans=1;
        q.push(front);
        i=0;
        while(!q.empty())
        {
            temp=q.front();
            if(temp.x==x1&&temp.y==y1)return ans;
            q.pop();
            ans++;
            i=(i+3)%4;
            rear.x=temp.x+xx[i];
            rear.y=temp.y+yy[i];
            if(rear.x>=0&&rear.x<n&&rear.y>=0&&rear.y<m&&map[rear.x][rear.y]!='#')
            {
                q.push(rear);
            }
            else        
            for(;;i=(i+1)%4)
            {
                rear.x=temp.x+xx[i];
                rear.y=temp.y+yy[i];
                if(rear.x>=0&&rear.x<n&&rear.y>=0&&rear.y<m&&map[rear.x][rear.y]!='#')
                {
                    q.push(rear);
                    break;
                }    
            }
        }
        return ans;
    }
    
    int bfs1(int x,int y,int x1,int y1)
    {
        tt front,rear,temp;
        queue<tt>q;
        while(!q.empty())
            q.pop();
        front.x=x,front.y=y,front.step=1;
        q.push(front);
        map[x][y]='#';
        while(!q.empty())
        {
            temp=q.front();
            if(temp.x==x1&&temp.y==y1)return temp.step;
            q.pop();
            for(int i=0;i<4;i++)
            {
                rear.x=temp.x+xx[i];
                rear.y=temp.y+yy[i];
                if(rear.x>=0&&rear.x<n&&rear.y>=0&&rear.y<m&&map[rear.x][rear.y]!='#')
                {
                    rear.step=temp.step+1;
                    q.push(rear);
                    map[rear.x][rear.y]='#';
                }    
            }
        }
        return 0;
    }
    int main()
    {
        int i,t,j,sx,sy,ex,ey,a,b,c;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&m,&n);
            for(i=0;i<n;i++)
            {
                scanf("%s",map[i]);
                for(j=0;j<m;j++)
                {
                    if(map[i][j]=='S')
                    {
                        sx=i;sy=j;
                    }
                    else if(map[i][j]=='E')
                    {
                        ex=i;ey=j;
                    }
                }
            }
            a=bfs(sx,sy,ex,ey);
            b=bfs(ex,ey,sx,sy);
            c=bfs1(sx,sy,ex,ey);
            printf("%d %d %d
    ",a,b,c);
        }    
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    javascript异步编程学习及实例
    通过调试vue-cli 构建代码学习vue项目构建运行过程
    web技术栈开发原生应用-多端共用一套代码
    vuejs应用开发前后端分离
    web前端跨域解决方案JSONP,CORS,NGINX反向代理
    js script 加载顺序
    js 百度地图
    layui-table 样式
    css 排版 test
    layui table
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3550153.html
Copyright © 2011-2022 走看看