题意:从(0.0)点出发,第一次走一步……第k次走k步,且每次必须转90度,不能走重复的点。求k次后回到出发点的所有情况。按最小字典序从小到大输出。

思路:

把所有坐标+220,保证其是正数,然后搜索。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <algorithm>
typedef long long ll;
using namespace std;
const int inf = 0x3f3f3f3f;
int tx[100];
int ty[100];
int dir[4][2] = {{1,0},{0,1},{0,-1},{-1,0}};
int vis[1000][1000];
char dire[] = {"ensw"};
int all;
struct node
{
int step;
int x,y;
int dir;
};
int n,k;
int ans[200]; bool judge(int i,node a) //判断是否能走
{
int x = a.x+dir[i][0]*(a.step+1);
int y = a.y+dir[i][1]*(a.step+1);
if(i == 1 || i == 2)
{
for(int j = 0; j < k; j++)
{
if(tx[j] == x && ty[j] >= y && ty[j] <= a.y && i == 2)
return true;
if(tx[j] == x && ty[j] >= a.y && ty[j] <= y && i == 1)
return true;
}
}
if(i == 0 || i == 3)
{
for(int j = 0; j < k; j++)
{
if(ty[j] == y && tx[j] >= x && tx[j] <= a.x && i == 3)
return true;
if(ty[j] == y && tx[j] >= a.x && tx[j] <= x && i == 0)
return true;
}
}
return false;
} void dfs(node a)
{
if(a.x == 220 && a.y == 220 && a.step == n)
{
// printf("%d\n",a.step);
// for(int i = 0; i < a.step;i++)
// printf("%d ",ans[i]);
// printf("\n");
for(int i = 0; i < a.step; i++)
{
printf("%c",dire[ans[i]]);
}
printf("\n");
all++;
return ;
}
if(a.step >= n)
return; for(int i = 0; i < 4; i++)
{
if(i == 0 && (a.dir == 3||a.dir == 0))continue;
if(i == 1 && (a.dir == 2||a.dir == 1))continue;
if(i == 2 && (a.dir == 1||a.dir == 2))continue;
if(i == 3 && (a.dir == 0||a.dir == 3))continue; if(judge(i,a))
continue;
node tt = a;
ans[a.step] = i;
tt.x = a.x+dir[i][0]*(a.step+1);
tt.y = a.y+dir[i][1]*(a.step+1);
if(vis[tt.x][tt.y])
continue;
vis[tt.x][tt.y] = 1;
tt.dir = i;
tt.step = a.step + 1;
dfs(tt);
vis[tt.x][tt.y] = 0;
}
return ;
} int main()
{
int cas = 1,T;
int a,b;
scanf("%d ",&T);
while(T--)
{
scanf("%d %d ",&n,&k);
memset(vis,0,sizeof(vis));
for(int i = 0; i < k; i++)
{
scanf("%d %d",&a,&b);
tx[i] = a+220;
ty[i] = b+220;
}
node cur;
all = 0;
cur.x = 220,cur.y = 220,cur.step = 0,cur.dir = -1;
dfs(cur);
printf("Found %d golygon(s).\n",all);
printf("\n");
}
return 0;
}

  

习题 7-2 uva225(回溯)的更多相关文章

  1. uva225 回溯剪枝

    这道题要剪枝,不然会超时,还有就是每次参加过的城市下次不能再参观,不然会WA. 对于障碍物的坐标我用了两种方法,第一种就是直接用STL里面的set,对于判断是否访问过直接用的count,用时960ms ...

  2. UVA225 Golygons 黄金图形(dfs+回溯)

    剪枝1:在同一个维度上的点具有相同的奇偶性,如果奇数数量只有奇数个那么一定不能返回原点. 剪枝2:当前位置怎么也走不回去. 3:沿途判断障碍即可. 在oj上提交0.347s,最快的0.012s,应该有 ...

  3. 【习题 7-2 UVA-225】Golygons

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 暴力枚举每次走哪里就好. 用一个二维数组来判重.(数据里,要求不能经过一个点两次->但路径可以相交 然后再用一个flag数组, ...

  4. 算法(第四版)C# 习题题解——2.4

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...

  5. 数据结构与算法分析:C语言描述(原书第2版 简体中文版!!!) PDF+源代码+习题答案

    转自:http://www.linuxidc.com/Linux/2014-04/99735.htm 数据结构与算法分析:C语言描述(原书第2版中文版!!!) PDF+源代码+习题答案 数据结构与算法 ...

  6. 【笔记】《算法竞赛入门》习题7-3 UVa211_多米诺效应

    title: 习题7-3 UVa211_多米诺效应 date: 2021-01-29 19:08:00 categories: 算法竞赛入门 tags: 数据结构 算法 UVa 题目: 使用28个多米 ...

  7. N皇后问题—初级回溯

    N皇后问题,最基础的回溯问题之一,题意简单N*N的正方形格子上放置N个皇后,任意两个皇后不能出现在同一条直线或者斜线上,求不同N对应的解. 提要:N>13时,数量庞大,初级回溯只能保证在N< ...

  8. jQuery 2.0.3 源码分析 回溯魔法 end()和pushStack()

    了解了jQuery对DOM进行遍历背后的工作机制,可以在编写代码时有意识地避免一些不必要的重复操作,从而提升代码的性能 从这章开始慢慢插入jQuery内部一系列工具方法的实现 关于jQuery对象的包 ...

  9. Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录

        Sharepoint学习笔记—习题系列--70-576习题解析  为便于查阅,这里整理并列出了70-576习题解析系列的所有问题,有些内容可能会在以后更新. 需要事先申明的是:     1. ...

随机推荐

  1. android使用sharesdk的小感

    1.sharesdk快捷方式,快捷方式集成了所有需要分享到的手机app,但是具有缺陷,举个例子(想要微信分享图片url,但是短信并不想带有图片,否则短信成彩信,这里集成的就有麻烦了,为了解决这种问题, ...

  2. mybatis的mapper接口代理使用的三个规范

    1.什么是mapper代理接口方式? MyBatis之mapper代理方式.mapper代理使用的是JDK的动态代理策略 2.使用mapper代理方式有什么好处 使用这种方式可以不用写接口的实现类,免 ...

  3. react-native-image-picker 运用launchCamera直接调取摄像头的缺陷及修复

    在前几天用react-native进行android版本开发当中,用到了"react-native-image-picker"的插件:根据业务的需求:点击按钮-->直接调取摄 ...

  4. python全栈开发-re模块(正则表达式)应用(字符串的处理)

    一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串集指定规则:该 ...

  5. 新概念英语(1-135)The latest report

    Lesson 135 The latest report 最新消息 Listen to the tape then answer this question. Is Karen Marsh going ...

  6. maven入门(1-3)构建简单的maven项目

    1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: mvn archetype:generate -DgroupId=com.mycompany.app -Dartifac ...

  7. less规范

    Less 编码规范 (1.1) 简介 该文档主要的设计目标是提高 Less 文档的团队一致性与可维护性. Less 代码的基本规范和原则与 CSS 编码规范 保持一致. 编撰 吕俊涛 本文档由商业运营 ...

  8. 从零搭建 webpack3 环境 #1 - 安装使用

    目录: (1)什么是webpack (2)webpack核心概念 (3)环境安装 (4)开始使用webpack 1.什么是webpack 官网的一幅图对webpack的解释,从图中可以看出,webpa ...

  9. Linux命令基础

    开启Linux操作系统,root用户登录GNOME图形界面,如下图: 切换到虚拟终端2,使用普通用户身份登录,查看系统提示符,如下图: 使用命令退出虚拟终端2上的登录用户,如下图: 切换到虚拟终端5, ...

  10. 卷积神经网络(CNN)中卷积的实现

    卷积运算本质上就是在滤波器和输入数据的局部区域间做点积,最直观明了的方法就是用滑窗的方式,c++简单实现如下: 输入:imput[IC][IH][IW] IC = input.channels IH ...