Bzoj 1085: [SCOI2005]骑士精神

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1085

dfs + 剪枝.

剪枝方法:

1.每次交换只能改变一个位置.若发现之间相差的步数加上以前走的步数大于15的话,直接舍弃这一状态.

2.初始时,\(ans\)设为\(16\)

有了上面两个剪枝就A了.

照这节奏,SCOI2005就刷完了???

#include <iostream>
#include <cstdio>
#define X 6
using namespace std; const int gx[] = {0,-2,-2,-1,-1,1,1,2,2};
const int gy[] = {0,-1,1,-2,2,-2,2,-1,1}; char map[X][X];
char c[X][X] = {
'0','0','0','0','0','0',
'0','1','1','1','1','1',
'0','0','1','1','1','1',
'0','0','0','*','1','1',
'0','0','0','0','0','1',
'0','0','0','0','0','0'
}; int ans; int inint(){
int num = 0;
for(int i = 1;i <= 5;++ i){
for(int j = 1;j <= 5;++ j){
if(c[i][j] != map[i][j])num ++;
}
}
return num;
} void dfs(int x,int y,int d,int tmp){
int l = inint();
if(d + l > 16)return;
if(d > ans)return;
if(l == 0) ans = d; for(int i = 1;i <= 8;++ i){
if(x + gx[i] < 1 || x + gx[i] > 5)continue;
if(y + gy[i] < 1 || y + gy[i] > 5)continue;
if(tmp + i == 9)continue;
swap(map[x][y],map[x + gx[i]][y + gy[i]]);
dfs(x + gx[i],y + gy[i],d + 1,i);
swap(map[x][y],map[x + gx[i]][y + gy[i]]);
}
} void work(){
int x,y;
for(int i = 1;i <= 5;++ i)cin >> map[i] + 1;
for(int i = 1;i <= 5;++ i){
for(int j = 1;j <= 5;++ j){
if(map[i][j] == '*')
x = i,y = j;
}
}
ans = 16;
dfs(x,y,0,0);
printf("%d\n",ans == 16 ? -1 : ans);
return;
} int main(){
int t;
scanf("%d",&t);
while(t --){
work();
}
return 0;
}

最新文章

  1. POJ3928Ping pong[树状数组 仿逆序对]
  2. 高性能MySQL笔记:第1章 MySQL架构
  3. js 完成对图片的等比例缩放的方法
  4. USB DATA Toggle
  5. 用vmware安装gho文件
  6. Java多线程中易混淆的概念
  7. 二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
  8. php数组的使用
  9. 读Zepto源码之集合操作
  10. python 三级菜单 while循环三次,湖北省市-县-街道的选择,3个while的循环 -day2
  11. SpringBoot运行原理
  12. mysql 的crud操作(增删改查)
  13. 版本控制commit和update过程
  14. windows下《Go Web编程》之Go开发工具
  15. node库的选择
  16. mfc CFileDialog类
  17. BZOJ5020 [THUWC 2017]在美妙的数学王国中畅游LCT
  18. 转载nginx+uwsgi+django
  19. Java并发编程:线程池
  20. QT STUDY

热门文章

  1. 自然语言处理(三)——PTB数据的batching方法
  2. Mybatis中分页存在的坑1
  3. JMeter博客系列:JMeter BeanShell示例
  4. TensorFlow 模型保存/载入
  5. linux下输出json字符串,用python格式化
  6. HTML表单设计
  7. C. Hamburgers
  8. js实现文本框验证和实现小数的加减乘除
  9. python部分 + 数据库 + 网络编程
  10. jsp实现账户登录、注册!