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);
        }
    }
  • 相关阅读:
    kmeans 初步学习小结
    CAVASS使用经验
    分类之数据集导入matlab方法
    彩色图转化成灰度图
    阈值分割之迭代选择阈值法
    初步学习之FCM
    特征提取学习之HOG原理讲解
    特征提取初步学习之LBP算法
    CodePen.io网站前端设计开发平台
    阿里负责人揭秘面试潜规则
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7670335.html
Copyright © 2011-2022 走看看