博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
URAL 1920 Titan Ruins: the Infinite Power of Magic
阅读量:5275 次
发布时间:2019-06-14

本文共 2471 字,大约阅读时间需要 8 分钟。

大意:

有一张N*N的网格,你每次可以走一步,每格只能走一次,有没有一种方法让走了L步后回到一个距原点1步远的格子? 

没有输出Unsuitable device,否则输出Overwhelming power of magic并输出方案。 

一开始用DFS 奇偶剪枝了还是TLE,

代码如下:

#include
#include
#include
#define N 110using namespace std;int n,t,end_i,end_j;bool visited[N][N],flag,ans;char map[N][N];int run[10010][2];int tem;int a[4][2]={
{-1,0},{1,0},{0,-1},{0,1}};void DFS(int i,int j,int c){if(flag){ return ;} if(c>t) return ; if(i<=0||i>n||j<=0||j>n) {return ;} if(map[i][j]=='D'&&c==t) {flag=ans=true; return ;} int temp=abs(i-end_i)+abs(j-end_j); temp=t-temp-c; //t扣掉还要走的最短步temp 和 已经走过的 c 如果这些步还是奇数直接不满足 if(temp&1) return ;//奇偶剪枝 奇数return for(int k=0;k<4;k++) if(!visited[i+a[k][0]][j+a[k][1]]) //开始进行各个方向的探索 记得回溯,取消之前走的状态 { visited[i+a[k][0]][j+a[k][1]]=true; DFS(i+a[k][0],j+a[k][1],c+1); if(flag){cout<
<<" "<
<
>n>>t) { if(t%2!=0||t>n*n){cout<<"Unsuitable device"<
后来是找规律做出来的,根据奇偶分类讨论一下;;

代码写的很烂。。

很多复用的没复用。。

#include
#include
#include
#define N 110using namespace std;int n,t,end_i,end_j;bool visited[N][N],flag,ans;char map[N][N];int run[10010][2];int tem;int a[4][2]={
{-1,0},{1,0},{0,-1},{0,1}};int main(){ int i;int xx,yy,kk; while(cin>>n>>t) { if(t%2!=0||t>n*n){cout<<"Unsuitable device"<
0;i--){ cout<<2<<" "<
<
=2;i--){ cout<
<<" "<
<
=2;i--) cout<
<<" "<
<
=2;i--) cout<
<<" "<
<
0;i--){ cout<<2<<" "<
<
=3;i--){ cout<<2<<" "<
<
=2;i--){ cout<
<<" "<<1<
=3;i--){ cout<<2<<" "<
<
0&&y==1&&x%2==0){ y=2;bb--; cout<
<<" "<
<
=2;i--){ cout<
<<" "<
<
=2;i--) cout<
<<" "<
<
=2;i--) cout<
<<" "<
<

有的队也有用DFS过的T T

 
#include
using namespace std;int n,l,ans;void dfs(int x,int y,int z){ if(ans==l) return ; if(x>n||y>n) return ; if(z==0){ printf("%d %d\n",x,y); ans+=2; dfs(x+1,y,0); printf("%d %d\n",x,y+1); if(n%2==x%2) dfs(x,3,1); } else if(z==1){ printf("%d %d\n",x,y); ans+=2; dfs(x,y+1,1); printf("%d %d\n",x-1,y); if(x==3&&y%2==0) dfs(x-2,y,2); } else if(z==2){ ans+=2; printf("%d %d\n",x,y); printf("%d %d\n",x,y-1); }}int main(){ cin>>n>>l; if(l%2==1||n*n

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on
2014-08-14 11:43 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/france/p/4808659.html

你可能感兴趣的文章
3237: [Ahoi2013]连通图 线段树分治
查看>>
尚学堂Spring视频教程(二):Spring控制反转
查看>>
Python学习笔记之函数式编程
查看>>
PHP的反射机制
查看>>
Python面向对象
查看>>
js正則表達式--验证表单
查看>>
不信任的 .exe 怎么办,用 Windows 沙盒啊!
查看>>
【郭林专刊】JSP中JSTL提供的函数标签EL表达式操作字符串的方法
查看>>
【郭林专刊】10个步骤让你成为高效的Web开发者
查看>>
jQuery选中该复选框来实现/全部取消/未选定/获得的选定值
查看>>
Linux网络编程——连接和面向连接的协议之间没有区别
查看>>
strcpy_s与strcpy对照
查看>>
hdu149850 years, 50 colors (多个最小顶点覆盖)
查看>>
Codeforces 484B Maximum Value(高效+二分)
查看>>
DisplayContent、StackBox、TaskStack笔记
查看>>
NetBeans工具学习之道:NetBeans的(默认)快捷键
查看>>
元组、字典、集合
查看>>
Android 通过代码改变控件的布局方式
查看>>
Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》
查看>>
Zabbix定义
查看>>