7-12 The Rotation Game IDA*
状态搜索题目 一开始打算用bfs 但是图给的不是矩形图 有点难以下手
参考了 lrj 将图上所有的点进行标号 直接一个一维数组就解决了图的问题 并且明确了每个点的标号 处理起来十分方便 可见处理不规则图一定要标号解决 之前的万圣节的早晨也是进行标号处理
用IDA* 十分快
启发方程为 d+h()<maxx 显然一次变动最多只改变了中心的一个格子 最多使得 多一个数字填充完毕
很有价值的状态搜索题目
#include<bits/stdc++.h>
using namespace std;
#define N 1000
int a[];
int rev[]={,,,,,,,};
int center[]={,,,,,,,};
int line[][]={
{ , , ,,,,}, // A
{ , , ,,,,}, // B
{, , , , , , }, // C
{,,,,,,}, // D
}; int judge(void)
{
for(int i=;i<;i++)
if(a[ center[i] ]!=a[ center[] ])return ;
return ;
} void change(int x)
{
int temp=a[ line[x][] ];
for(int i=;i<;i++)
a[ line[x][i] ]=a[ line[x][i+] ];
a[ line[x][] ]=temp;
} int differ(int x)
{
int n=;
for(int i=;i<;i++)
if(a[ center[i] ]!=x)n++;
return n;
} int h(void)
{
return min(differ(),min(differ(),differ()));
} char ans[N];
bool dfs(int d,int maxx)
{
if(judge())
{
ans[d]='\0';
printf("%s\n",ans);
return true;
}
if( d+h() >maxx)return false;
for(int i=;i<;i++)
{
ans[d]=i+'A';
change(i);
if(dfs(d+,maxx))return true;
change( rev[i] );
}
return false;
} void solve(void)
{
if(judge()){printf("No moves needed\n");}
else
for(int maxx=;;maxx++)
if(dfs(,maxx))break;
printf("%d\n",a[]);
return ;
} int main()
{
for(int i=;i<=;i++)
for(int j=;j<;j++)
line[i][j]= line[ rev[i] ][-j]; while(scanf("%d",&a[]),a[])
{
for(int i=;i<=;i++)scanf("%d",&a[i]);
solve();
}
}
7-12 The Rotation Game IDA*的更多相关文章
- [poj2286]The Rotation Game (IDA*)
//第一次在新博客里发文章好紧张怎么办 //MD巨神早已在一个小时前做完了 The Rotation Game Time Limit: 15000MS Memory Limit: 150000K To ...
- HUD 1043 Eight 八数码问题 A*算法 1667 The Rotation Game IDA*算法
先是这周是搜索的题,网站:http://acm.hdu.edu.cn/webcontest/contest_show.php?cid=6041 主要内容是BFS,A*,IDA*,还有一道K短路的,.. ...
- POJ2286 The Rotation Game[IDA*迭代加深搜索]
The Rotation Game Time Limit: 15000MS Memory Limit: 150000K Total Submissions: 6325 Accepted: 21 ...
- POJ 2286 The Rotation Game IDA*
(再一次感谢学长幻灯片) ID A* 随便自己yy了一下. 额嗯 思路什么的都没有问题 就是改不对.. 无奈地删代码...边删边交. 删啊删 哎呦 AC了 ... ... ... 找删的那一段 . o ...
- hdu 1667 The Rotation Game ( IDA* )
题目大意: 给你一个“井”子状的board,对称的由24个方块组成,每个方块上有123三个数字中的一个.给你初始状态,共有八种变换方式,求字典序最小的最短的的变换路径使得,board中间的八个方块上数 ...
- 浅谈被加壳ELF(即android的so文件)的调试
本文只讨论如何调试被加壳的ELF文件,包括调试中的技巧运用及调试过程中可能遇到的问题的解决方法,不包含如何还原加固的DEX本文将以某加壳程序和某加固为目标. 一.ELF格式简介 ELF全称:Execu ...
- HDU分类
原地址:http://www.byywee.com/page/M0/S607/607452.html 总结了一下ACM STEPS的各章内容,趁便附上我的Steps题号(每人的不一样). 别的,此文首 ...
- CVE-2012-0158 分析
目录 CVE-2012-0158 分析&利用 1.实验环境 2.下载poc样本 3.调试并找到漏洞触发点 4.分析漏洞触发模块及流程 5.漏洞利用 6.总结 7.参考资料 CVE-2012-0 ...
- U3D学习07-插值运算(位移与旋转)
1.Lerp 线性插值计算.匀速移动 2.LerpAngle 线性插值计算.匀速旋转 3.MoveTowards 4.MoveTowardsAngel 5.SmoothStep非匀速移动 6.S ...
随机推荐
- 【树状数组套主席树】带修改区间K大数
P2617 Dynamic Rankings 题目描述给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+ ...
- 洛谷 P2336 [SCOI2012]喵星球上的点名 解题报告
P2336 [SCOI2012]喵星球上的点名 题目描述 a180285 幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有 \(N\) 个喵星人,每个喵星人的 ...
- 【bzoj3196】 Tyvj1730—二逼平衡树
http://www.lydsy.com/JudgeOnline/problem.php?id=3196 (题目链接) 题意 1.查询k在区间内的排名:2.查询区间内排名为k的值:3.修改某一位值上的 ...
- 【POJ3171】Cleaning Shifts 带权区间最小覆盖
题目大意:给定一个长度为 N 的序列,求带权区间最小覆盖. 题解:设 \(dp[i]\) 表示从左端点到 i 的最小权值是多少,则状态转移为:\(dp[e[i].ed]=min\{dp[j],j\in ...
- 【转载】SQL注入原理讲解
这几篇文章讲的都很不错,我看了大概清除了sql注入是怎么一回事,打算细细研究一下这个知识,另写一篇博客: 原文地址:http://www.cnblogs.com/rush/archive/2011/1 ...
- 那些年的 网络通信之 TCP/IP 传输控制协议 ip 加 端口 ---
/* 一个文本小写转换为大写的小程序,当客户端从键盘录入一串字符串发送到服务端服务端转换为大写返回给客户端 */ import java.io.*; import java.net.*; class ...
- [整理]ASP.NET 中异常处理
[整理]ASP.NET 中异常处理 1.直接通过重写Controller的OnException来处理异常 public class HomeController : Controller { pub ...
- 网页中创建音频、视频和Flash等多媒体:object元素
<object>元素:它主要用于定义网页中的多媒体,比如音频.视频.Java applets.PDF.ActiveX和Flash.Object标签是成对出现的,在object标签内可以使用 ...
- Chrome插件LiveStyle结合Sublime Text3编辑器实现高效可视化开发
LiveStyle是Chrome中提高开发效率的一款CSS编辑器插件.利用LiveStyle和Sublime Text3编辑器结合可实现可视化开发,一次配置,简单易用! 本文由前端交流QQ群管理员—— ...
- ASP.NET Web API queryString访问的一点总结
自从开始使用ASP.NET Web API,各种路由的蛋疼问题一直困扰着我,相信大家也都一样. Web API的路由配置与ASP.MVC类似,在App_Start文件夹下,有一个WebApiConfi ...