N - New Game(DFS+剪枝)
Description
New game是在一个M*M的特殊棋盘(棋盘的第i行都标上了数字i)上进行的新式游戏。给定一个数字N,要求选手把一个棋子从左上角(1,1)移到右下角(M,M),移动时只能往右或往下。要求移动后经过的数字和为N,且拐弯的次数最少。
如果对给出的N,选手不能找出移动方案使得经过的数字和为N或找出的路径拐弯次数不是最少,选手就输了。所以,选手一定千方百计要找出满足条件的路径!!
Input
两个正整数M,N(其中M<=16),数据保证有解。
Output
最少拐弯数。
Sample
Input
4 22
Output
1
#include<bits/stdc++.h>#define INF 0x3f3f3f3f
using namespace std;const int N = 35;int m, n;
int book[N][N];
int mp[N][N];
int dir[2][2] = {{1, 0}, {0, 1}};
int minn;void DFS(int x, int y, int flag, int id, int cnt)
{if(id > minn) //最优剪return ;if(cnt > n) //可行剪return ;if(x == m && y == m){if(cnt == n){minn = min(minn, id);}return ;}for(int i = 0; i < 2; i++){int xx = x + dir[i][0];int yy = y + dir[i][1];if(xx >= 1 && xx <= m && yy >= 1 && yy <= m && !book[xx][yy]){book[xx][yy]=1;if(cnt == 1){DFS(xx, yy, i, id, cnt + mp[xx][yy]);}else{if(i != flag)DFS(xx, yy, i, id + 1, cnt + mp[xx][yy]);elseDFS(xx, yy, i, id, cnt + mp[xx][yy]);}book[xx][yy] = 0;}}
}void init()
{for(int i = 1; i <= m; i++){for(int j = 1; j <= m; j++)mp[i][j] = i;}
}
int main()
{while(cin >> m >> n){memset(book, 0, sizeof(book));init();book[1][1] = 1;minn = INF;DFS(1, 1, 0, 0, 1);cout << minn << endl;}return 0;
}
N - New Game(DFS+剪枝)相关推荐
- POJ2688状态压缩(可以+DFS剪枝)
题意: 给你一个n*m的格子,然后给你一个起点,让你遍历所有的垃圾,就是终点不唯一,问你最小路径是多少? 思路: 水题,方法比较多,最省事的就是直接就一个BFS状态压缩暴搜就行 ...
- poj2362 DFS+剪枝
题大致做法就是对所有小棒子长度求和sum,sum就是正方形的周长,sum/4就是边长side. 问题就转变为:这堆小棒子能否刚好组合成为4根长度均为side的大棒子 不难了解,小棒子的长度越长,其灵活 ...
- [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
[问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...
- 【HDU - 1518】Square (经典的dfs + 剪枝)
题干: Given a set of sticks of various lengths, is it possible to join them end-to-end to form a squar ...
- [DFS|剪枝] leetcode 22 括号生成
[DFS|剪枝] leetcode 22 括号生成 1.题目 题目链接 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合. 示例: 输入:n = 3 输出:[& ...
- poj2248 DFS+剪枝 or BFS
传送门 2248:Addition Chains 描述 An addition chain for n is an integer sequence with the following four p ...
- 2020 ICPC 南京 H Harmonious Rectangle (DFS剪枝+思维)
题目链接H-Harmonious Rectangle_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京) 题目描述 A vertex-colored rectangle is a rec ...
- DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山
DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_&l ...
- 洛谷 P1433 吃奶酪 dfs剪枝
洛谷 P1433 吃奶酪 dfs剪枝 题解: dfs+剪枝,不过现在好像被卡时间了,第10个点过不了.. 代码如下: #include<iostream> #include<algo ...
- 牛客算法周周练17D - 刺客信条(dfs剪枝 | 优先队列 + bfs)
题目大意: 给出一张n * m的地图,每经过一个建筑都需要一定的时间,而经过ABC要花费100,要求输出从S到E的最短时间. 解题思路: 思路一:dfs剪枝 输入地图的时候用char输入,然后转成in ...
最新文章
- 证明实对称正定矩阵A的Gauss-Seidel法必定收敛(完整过程)
- 网站关键词优化如何控制其密度?
- python3 第三十四章 - 聊聊File对象
- Java学习笔记---IO操作
- 计算机领域专业术语中英文对照(时常更新)
- lm opencv 算法_Levenberg–Marquardt算法学习(和matlab的LM算法对比)
- cc2530设计性实验代码三
- RANSAC算法详解+Python实现
- 手动设置ip 访问内网地址
- 迟到的Meltdown/Spectre分析
- php计算跨月请假天数,计算请假天数JavaScript方法
- java二重积分_《University Calculus》-chaper13-多重积分-二重积分的引入
- wos 文献被引_WoS和ESI数据库高被引论文的界定.pdf
- HTTP之proxy
- 联想电脑 恢复键盘F1-F12按键的标准功能
- JAVA 编程专业词语解释~~映射
- 软考视频总结——环环相扣
- 【C语言】实现一个函数,可以左旋字符串中的K个字符
- oracle中SQL的加号含义
- 阿里云服务器ECS年终特惠,云服务器报价出炉
热门文章
- Docker源码分析(四):Docker Daemon之NewDaemon实现
- Linux下C语言的调试--转
- Keras中Callback函数的使用
- 数字线索: F-35单价已低于四代机,其成本控制是如何实现的?
- 国家新一代人工智能开放创新平台将参加重庆智博会
- 凭什么还能独吞iPhone 8的“芯”?
- Java 8 - 收集器Collectors_分区partitioningBy
- 运行vc++6.0出现Error spawning cl.exe问题解决方法
- mysql内置多个数据存储引擎_一个mysql数据库,既有myisam存储引擎,又有innodb存储引擎,参数如...
- redmine 配置