zoukankan      html  css  js  c++  java
  • UVA 225 Golygons

    https://vjudge.net/problem/UVA-225

    题意:

    平面上有k个障碍点,第i次走i个单位,每次方向必须改变90°,

    不能停留在重复点,不能经过障碍点

    输出移动序列方案  以及 总数

    n<=20,大概一个方向离原点的最远距离为110

    超过这个距离就无法返回原点

    负数坐标整体平移

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    int n,tot;
    bool mp[221][221],vis[221][221];
    char ans[21];
    
    void dfs(int sum,int x,int y,char last)
    {
        if(sum==n)
        {
            if(x || y) return;
            if(!x && !y)
            {
                ans[sum]='';
                puts(ans); tot++;
                return;
            }
        }
        if(vis[x+110][y+110]) return;
        vis[x+110][y+110]=true;
        bool f;
        if(last!='e' && last!='w' && abs(y+sum+1)<=110)
        {
            f=false;
            for(int i=1;i<=sum+1 && !f;i++) f=mp[x+i+110][y+110];
            if(!f) dfs(sum+1,x+sum+1,y,ans[sum]='e'); 
        }
        if(last!='n' && last!='s' && abs(x-sum-1)<=110)
        {
            f=false;
            for(int i=1;i<=sum+1 && !f;i++) f=mp[x+110][y+i+110];
            if(!f) dfs(sum+1,x,y+sum+1,ans[sum]='n');
        }
        if(last!='s' && last!='n' && abs(x+sum+1)<=110)
        {
            f=false;
            for(int i=1;i<=sum+1 && !f;i++) f=mp[x+110][y-i+110];
            if(!f) dfs(sum+1,x,y-sum-1,ans[sum]='s');
        }
        if(last!='w' && last!='e' && abs(y-sum-1)<=110)
        {
            f=false;
            for(int i=1;i<=sum+1 && !f;i++) f=mp[x-i+110][y+110];
            if(!f) dfs(sum+1,x-sum-1,y,ans[sum]='w');
        }
        vis[x+110][y+110]=false;
    }
    
    int main()
    {
        int T,k,x,y;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&k);
            memset(mp,false,sizeof(mp));
            while(k--)
            {
                scanf("%d%d",&x,&y);
                if(abs(x)<=110 && abs(y)<=110)    mp[x+110][y+110]=true;
            }
            tot=0;
            dfs(0,0,0,'a');
            printf("Found %d golygon(s).
    
    ",tot);
        }
    }
  • 相关阅读:
    树-1
    javaSE 2
    (蓝桥杯)蛇形矩阵的求法
    年轻母牛的故事
    互质环(序列)与最小公倍数的几种求法
    算法的复杂度
    Halo开源博客项目配置
    IDEA报错稀有语法问题
    带你跑ELADMIN后台管理系统开源项目
    相比c++,Java在基础语法的改变
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7670335.html
Copyright © 2011-2022 走看看