习题 7-2 uva225(回溯)
题意:从(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(回溯)的更多相关文章
- uva225 回溯剪枝
这道题要剪枝,不然会超时,还有就是每次参加过的城市下次不能再参观,不然会WA. 对于障碍物的坐标我用了两种方法,第一种就是直接用STL里面的set,对于判断是否访问过直接用的count,用时960ms ...
- UVA225 Golygons 黄金图形(dfs+回溯)
剪枝1:在同一个维度上的点具有相同的奇偶性,如果奇数数量只有奇数个那么一定不能返回原点. 剪枝2:当前位置怎么也走不回去. 3:沿途判断障碍即可. 在oj上提交0.347s,最快的0.012s,应该有 ...
- 【习题 7-2 UVA-225】Golygons
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 暴力枚举每次走哪里就好. 用一个二维数组来判重.(数据里,要求不能经过一个点两次->但路径可以相交 然后再用一个flag数组, ...
- 算法(第四版)C# 习题题解——2.4
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...
- 数据结构与算法分析:C语言描述(原书第2版 简体中文版!!!) PDF+源代码+习题答案
转自:http://www.linuxidc.com/Linux/2014-04/99735.htm 数据结构与算法分析:C语言描述(原书第2版中文版!!!) PDF+源代码+习题答案 数据结构与算法 ...
- 【笔记】《算法竞赛入门》习题7-3 UVa211_多米诺效应
title: 习题7-3 UVa211_多米诺效应 date: 2021-01-29 19:08:00 categories: 算法竞赛入门 tags: 数据结构 算法 UVa 题目: 使用28个多米 ...
- N皇后问题—初级回溯
N皇后问题,最基础的回溯问题之一,题意简单N*N的正方形格子上放置N个皇后,任意两个皇后不能出现在同一条直线或者斜线上,求不同N对应的解. 提要:N>13时,数量庞大,初级回溯只能保证在N< ...
- jQuery 2.0.3 源码分析 回溯魔法 end()和pushStack()
了解了jQuery对DOM进行遍历背后的工作机制,可以在编写代码时有意识地避免一些不必要的重复操作,从而提升代码的性能 从这章开始慢慢插入jQuery内部一系列工具方法的实现 关于jQuery对象的包 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录
Sharepoint学习笔记—习题系列--70-576习题解析 为便于查阅,这里整理并列出了70-576习题解析系列的所有问题,有些内容可能会在以后更新. 需要事先申明的是: 1. ...
随机推荐
- JAVA线程概念
一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 ...
- 浏览器关闭后,Session会话结束了么?
今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了? 我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保 存当前用户的状态信息 ...
- Spark性能优化总结
1. 避免重复加载RDD 比如一份从HDFS中加载的数据 val rdd1 = sc.textFile("hdfs://url:port/test.txt"),这个test.txt ...
- java希尔排序
java希尔排序 1.基本思想: 希尔排序也成为"缩小增量排序",其基本原理是,现将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插 ...
- io文本加密
文本加密习题 package io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Inpu ...
- Collaborative Filtering(协同过滤)算法详解
基本思想 基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢(如商品购买,收藏,内容评论或分享),并对这些喜好进行度量和打分.根据不同用户对相同商品或内容的态度和偏好程度计算用户 ...
- 算法题丨3Sum
描述 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all ...
- 阿里云API网关(17)签名算法
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- maven入门(6)maven的生命周期
1. 三套生命周期 Maven拥有三套相互独立的生命周期,它们分别为clean,default和site. 每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和 ...
- oracle获取表字段属性
select b.COMMENTS,a.COLUMN_NAME,a.DATA_TYPE,a.DATA_LENGTH, a.DATA_PRECISION,a.DATA_SCALE,a.NULLABLE, ...