思路:不是动骑士,而是动空格。只能动15次,证明搜索树的高的确定的,考虑IDA解决
IDA
能很好地解决一些搜索中有上界的情况
大概就是搞一个估值函数,然后当前情况+估价函数>限制的情况直接剪掉这个情况
所以IDA*执行的时候需要枚举一下上界。然后本题的估价函数表现为当前局面和目标相比还差了多少个步数.
每次交换最好的情况就是黑白直接对换。那样消除不同格子(2个)最快的步数也是2.也就是一个步数消除一个不同点,这是最好的情况.

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
const int INF = 1e9+7;
typedef long long ll;
typedef pair<int,int> pii;
#define all(a) (a).begin(), (a).end()
#define pb(a) push_back(a)
vector<int> G[maxn];
int mp[7][7];
//0是白子,1是黑子,2个空格
int ans[7][7]={{0,0,0,0,0,0},
{0,1,1,1,1,1},
{0,0,1,1,1,1},
{0,0,0,2,1,1},
{0,0,0,0,0,1},
{0,0,0,0,0,0}
};
int n =5;
int flag = -1;
int func(){int dif = 0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++) dif+=(mp[i][j]!=ans[i][j]);}return dif;
}
int dx[] = {1,1,-1,-1,2,2,-2,-2},dy[] = {2,-2,2,-2,1,-1,1,-1};
int mx;
void dfs(int cur,int x,int y){if(flag!=-1) return ;if(cur>mx) return ;if(cur==mx){if(!func()) flag = cur;return; }for(int i=0;i<8;i++){int nx = x+dx[i];int ny = y + dy[i];if(nx<=0||nx>n||ny<=0||ny>n) continue;swap(mp[nx][ny],mp[x][y]);if(func()+cur<=mx) dfs(cur+1,nx,ny);swap(mp[nx][ny],mp[x][y]); }
}
//
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;cin>>T;while(T--){int x,y;for(int i=1;i<=n;i++){string s;cin>>s;for(int j=1;j<=n;j++){if(s[j-1]!='*') mp[i][j] = s[j-1] - '0';else mp[i][j] = 2,x = i,y = j;}}flag = -1;for(mx = 0;mx<=15;mx++){dfs(0,x,y);if(flag!=-1) break;}cout<<flag<<"\n";}
}

P2324 [SCOI2005]骑士精神(IDA*)相关推荐

  1. 洛谷 P2324 [SCOI2005]骑士精神 解题报告

    P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...

  2. 【题解】P2324[SCOI2005] 骑士精神

    Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位. 在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为 ...

  3. [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]

    题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...

  4. 洛谷 P2324 [SCOI2005]骑士精神

    目录 题目 思路 $Code$ 题目 戳 思路 $dfs$. $Code$ #include<iostream> #include<cstdio> #include<cs ...

  5. P2324 [SCOI2005]骑士精神(迭代加深搜索,dfs)

    传送门 文章目录 解析 解析 很显然,让马走的话状态记录和转移都会比较复杂 所以转化成让空位跳会更好做一点 但这不是重点 初看本题,其实第一感觉是bfs 但是状态数理论上最差可以达到815,(当然基本 ...

  6. luoguP2324 [SCOI2005]骑士精神 IDA*

    题面 这个题比较简单 直接枚举搜索深度 估价函数为当前棋盘与目标棋盘不同的棋的个数 然后直接迭代加深搜索就可以了 当然还不能走回头路 Codes #include<bits/stdc++.h&g ...

  7. bzoj 1085: [SCOI2005]骑士精神(IDA*)

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2296  Solved: 1328 [Submit][St ...

  8. BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2838  Solved: 1663 [Submit][St ...

  9. bzoj1085: [SCOI2005]骑士精神(a*)

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2555  Solved: 1472 [Submit][St ...

最新文章

  1. 43request对象 续
  2. IndexedQueueT——C#中的自定义队列
  3. Dart基础第6篇:集合类型List Set Map详解 以及循环语句 forEach map where any every
  4. 织云Lite发布:详解包管理核心能力
  5. LOJ6031 「雅礼集训 2017 Day1」字符串 SAM、根号分治
  6. Axure 9.0激活码亲测可用
  7. 半导体PN结的工作原理
  8. ce修改植物大战僵尸之修改阳光值
  9. MIKE 21 教程 2.5 水动力模块教学:涡粘系数(Eddy viscosity),河床阻力与曼宁系数(Bed Resistance)
  10. 区块链经济:机构加密经济学的初学者指南
  11. 【Linux】创建、修改和删除用户组(groupadd | groupmod | groupdel)
  12. 响应式 - 创建自适应的响应式字体
  13. 静态文档,动态文档和活动文档
  14. 计算机组成原理第七章笔记---输入输出
  15. 安卓 微信公众号 默认不操作拦截回退失败
  16. 查询linux下有多少用户,Linux 查看系统现存所有用户命令
  17. 今日金融词汇--- 高杠杆模式
  18. Qt ECG Monitor Qt嵌入式床旁心电监护仪项目源码
  19. 使用 FSL 和 TrackVis 分析 DTI 数据
  20. 滴滴给自己留了后手。。。

热门文章

  1. python中怎么表示一个数的几次方
  2. 计算机知识交流的平台,「电脑」-一个分享电脑知识的平台
  3. SQLServer通过sql修改表主键
  4. CSS制作太极八卦图及衍生物
  5. Elasticsearch使用说明(搬砖高人)
  6. Linux快捷键及服务命令
  7. 两边同时取对数求复合函数_等式两边同时取对数,什么条件下能同时取对数??...
  8. 防火门监控系统在智能建筑消防的重要性及应用介绍
  9. 【LC刷题笔记】第四天:23+26+33(1-16)
  10. CCF ChinaSoft 2022 大会特邀报告重磅推出!