zoukankan      html  css  js  c++  java
  • poj 3083 Children of the Candy Corn 夜

    http://poj.org/problem?id=3083

    题目不难 就是繁琐呀

    代码:

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<vector>
    #include<set>
    #include<map>
    #include<string>
    #include<queue>
    #include<stack>
    #include <iomanip>
    using namespace std;
    #define LL long long
    #define sint short int
    const int INF=0x3f3f3f3f;
    //priority_queue<int,vector<int>,greater<int> >qt;
    const int N=50;
    char graph[N][N];
    typedef pair<int,int>point;
    queue<point>qt;
    int dist[N][N];
    bool in[N][N];
    int X[]={-1,0,1,0};
    int Y[]={0,1,0,-1};
    int n,m;
    bool OK(int x,int y)
    {
        if(x>=0&&x<n&&y>=0&&y<m&&graph[x][y]!='#')
        return true;
        return false;
    }
    int spfa(int sx,int sy,int ex,int ey)
    {
        memset(in,false,sizeof(in));
        memset(dist,-1,sizeof(dist));
        qt.push(point(sx,sy));
        in[sx][sy]=true;
        dist[sx][sy]=1;
        while(!qt.empty())
        {
            int x=qt.front().first;
            int y=qt.front().second;
            in[x][y]=false;
            qt.pop();
            for(int i=0;i<4;++i)
            {
                int l1=x+X[i];
                int l2=y+Y[i];
                if(OK(l1,l2)&&(dist[l1][l2]==-1||dist[l1][l2]>dist[x][y]+1))
                {
                   dist[l1][l2]=dist[x][y]+1;
                   if(!in[l1][l2])
                   {
                       in[l1][l2]=true;
                       qt.push(point(l1,l2));
                   }
                }
            }
        }
        return dist[ex][ey];
    }
    int Lsearch(int sx,int sy,int ex,int ey,int t)
    {
        int step=1;
        int kx=sx,ky=sy;
        while(true)
        {
            if(kx==ex&&ky==ey)
            break;
            bool flag=false;
            for(int i=(t+3)%4,j=0;j<4;++j,i++)
            {
                int l=(i+4)%4;
                int l1=kx+X[l];
                int l2=ky+Y[l];
                if(OK(l1,l2))
                {kx=l1;ky=l2;t=l;++step;flag=true;break;}
            }
            if(flag==false)
            return INF;
        }
        return step;
    }
    int Rsearch(int sx,int sy,int ex,int ey,int t)
    {//cout<<kx<<" "<<ky<<" "<<t<<endl;
        int step=1;
        int kx=sx,ky=sy;
        while(true)
        {//cout<<kx<<" "<<ky<<" "<<t<<endl;
            if(kx==ex&&ky==ey)
            break;
            bool flag=false;
            for(int i=(t+1)%4,j=0;j<4;++j,i--)
            {
                int l=(i+4)%4;
                int l1=kx+X[l];
                int l2=ky+Y[l];
                if(OK(l1,l2))
                {kx=l1;ky=l2;t=l;++step;flag=true;break;}
            }
            if(flag==false)
            return INF;
        }
        return step;
    }
    int main()
    {
        //freopen("data.in","r",stdin);
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int sx,sy,ex,ey;
            scanf("%d %d",&m,&n);
            getchar();
            for(int i=0;i<n;++i)
            gets(graph[i]);
            for(int i=0;i<n;++i)
            for(int j=0;j<m;++j)
            if(graph[i][j]=='S')
            {sx=i;sy=j;}
            else if(graph[i][j]=='E')
            {ex=i;ey=j;}
            int ans1=INF,ans2=INF,ans3;
            //cout<<sx<<" "<<sy<<" "<<ex<<" "<<ey<<endl;
            for(int i=0;i<4;++i)
            {
                ans1=min(ans1,Lsearch(sx,sy,ex,ey,i));
                ans2=min(ans2,Rsearch(sx,sy,ex,ey,i));
            }
            ans3=spfa(sx,sy,ex,ey);
            printf("%d %d %d\n",ans1,ans2,ans3);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Redis源代码分析(十三)--- redis-benchmark性能測试
    kvm中运行kvm
    umount.nfs device busy day virsh extend diskSpace, attachDisk
    ultravnc
    openNebula dubug
    maintenance ShellScripts
    virsh VMI deploy data serial xml
    cloud computing platform,virtual authentication encryption
    基于C 的libvirt 接口调用
    storage theory
  • 原文地址:https://www.cnblogs.com/liulangye/p/2803875.html
Copyright © 2011-2022 走看看