题目链接:https://www.luogu.org/problemnew/show/P2324

不懂怎么剪枝,所以说,,我需要氧气。。

第一道A*

 // luogu-judger-enable-o2
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define maxn 10
using namespace std;
int T, ans = , mx, sx, sy;
int aim[][] = {{,,,,,},
{,,,,,},
{,,,,,},
{,,,,,},
{,,,,,},
{,,,,,}};
int dx[] = {-,-,,,,,-,-};
int dy[] = {,,,,-,-,-,-};
int a[maxn][maxn];
inline int h()
{
int ret = ;
for(int i = ; i <= ; i++)
for(int j = ; j <= ; j++)
if(a[i][j] != aim[i][j]) ret++;
return ret;
}
inline bool move(int x, int y)
{
if(x >= && x <= && y >= && y <= ) return true;
return false;
}
void A_star(int now, int x, int y)
{
if(now > mx) return;
int cnt = h();
if(cnt == )
{
ans = min(ans, now);
return;
}
if(cnt + now - > mx) return;
int nowx, nowy;
for(int i = ; i <= ; i++)
{
nowx = x + dx[i];
nowy = y + dy[i];
if(move(nowx, nowy))
{
swap(a[nowx][nowy],a[x][y]);
A_star(now+,nowx,nowy);
swap(a[nowx][nowy],a[x][y]);
}
}
}
int main()
{
cin.sync_with_stdio(false);
cin>>T;
while(T--)
{
char s;
ans = ;
memset(a,,sizeof(a));
for(int i = ; i <= ; i++)
for(int j = ; j <= ; j++)
{
cin>>s;
if(s != '*')
a[i][j] = s + - '';
if(s == '*')
{
a[i][j] = ;
sx = i;
sy = j;
}
}
for(mx = ; mx <= ; mx++)
{
A_star(,sx,sy);
if(ans == mx) break; }
if(ans == )
{
cout<<-<<endl;
}
else
{
cout<<ans<<endl;
}
}
return ;
}

【luogu P2324 [SCOI2005]骑士精神】 题解的更多相关文章

  1. [luogu P2324] [SCOI2005]骑士精神

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

  2. Luogu P2324 [SCOI2005]骑士精神 搜索

    刚开始写了个没迭代的...结果过了$qwq$ 然后迭个代..更快了.. #include<cstdio> #include<iostream> #define R regist ...

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

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

  4. P2324 [SCOI2005]骑士精神(A*)

    P2324 [SCOI2005]骑士精神 A*与爆搜的不同就是它有一个估价函数$h(x)$ 这个估价函数一般设为从当前状态到终点状态的估计最短步数,这样可以有效剪枝 但估计值必须严格小于等于实际剩余步 ...

  5. BZOJ1085:[SCOI2005]骑士精神——题解+IDA*粗略讲解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1085 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空 ...

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

    ·有关IDA* 是带有估值函数的迭代加深搜索,表现出出色的效率. 估值函数可以简单的定义为「已经到位的骑士的个数」. 然后就是普通的迭代加深了. 算法酷炫不一定赢,搜索好才是成功. ——Loli Co ...

  7. Luogo P2324 [SCOI2005]骑士精神

    所有想练习A*的人都先来敲一下这道题吧. 数据范围即便只有5*5,但朴素的爆搜还是会超时. 因此考虑剪枝. 对于这道题,肯定只要进行最优化剪枝,判断现在走的步数+剩下最少要走的步数,如果大于ans或者 ...

  8. P2324 [SCOI2005]骑士精神

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

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

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

随机推荐

  1. 数据库保存session

    一般情况下,php.ini里的session.save_handler默认是file,也就是用文件来保存session,这种方式有几个缺点: 1.如果单靠session自己的垃圾回收机制,时间久了,保 ...

  2. Become a Better Programmer: 5 Essential Methods at a Glance--reference

    http://www.git-tower.com/blog/become-a-better-programmer-5-essentials/ Become a Better Programmer: 5 ...

  3. java I/O流 温习随笔

    java I/O流的熟练掌握是十分重要的. 在我的理解中,I/O流可以分为两种:字符流.字节流.字符流就是可以用来传输字符的流,比如传输txt文本,简单的说,只有能被电脑中的记事本直接打开并且你能看懂 ...

  4. SpringMVC框架下实现分页功能

    1.创建实体类Page.java @Entity public class Page { private int totalRecord;// 表示查询后一共得到多少条结果记录 private int ...

  5. C#学习笔记4

    1.C#只支持单一继承,若想要实现多重继承的效果.有2种方式: 第一种为传递继承,A为基类,B继承A,C继承B,通过传递来增迭要包含的元素,但这种继承的设计,在业务上具有明显的从属关系. 第二种为聚合 ...

  6. java几种常见的排序算法总结

    /*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int  ...

  7. webpack起步

    为什么要使用webpack 很牛逼的样子 https://www.webpackjs.com/comparison/ 基本概念 1. 入口(entry) module.exports = { entr ...

  8. angular1结合webpack构建工具

    目录结构 webpack.config.js const { resolve } = require('path') const webpack = require('webpack') const ...

  9. css滤镜模糊效果filter和backdrop-filter

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 別人寫的git的總結,寫自己這裡學習用

    這裡是原文,http://www.cnblogs.com/ang-/p/7352909.html 貼這裡慢慢學. git入门大全   阅读目录 前言 基本概念 文件几种状态 创建新仓库 配置 检出仓库 ...