Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SDUT 1125 New Game 【 DFS 】

SDUT 1125 New Game 【 DFS 】

作者头像
Lokinli
发布于 2023-03-09 06:30:09
发布于 2023-03-09 06:30:09
12700
代码可运行
举报
文章被收录于专栏:以终为始以终为始
运行总次数:0
代码可运行

Description

New game是在一个M*M的特殊棋盘(棋盘的第i行都标上了数字i)上进行的新式游戏。给定一个数字N,要求选手把一个棋子从左上角(1,1)移到右下角(M,M),移动时只能往右或往下。要求移动后经过的数字和为N,且拐弯的次数最少。 如果对给出的N,选手不能找出移动方案使得经过的数字和为N或找出的路径拐弯次数不是最少,选手就输了。所以,选手一定千方百计要找出满足条件的路径!!

Input

两个正整数M,N(其中M<=16),数据保证有解。

Output

最少拐弯数。

Sample

Input 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
4 22

Output 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1

题解:DFS 搜索,注意判断拐弯的次数,第一次无论是向右还是向下都是不算的,只有路径发生变化,才算是,所以可以设置一个 flag 值,因为只有向下和向右两种情况,只要是0 和 1 就可以,与上次不相同, num ++ 。最后还是看了一下题解才知道自己错哪里了。

(愈来愈菜,嘤)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <bits/stdc++.h>
using namespace std;
const int N = 500;
const int inf = 0x3f3f3f3f;
int n,m,ans;
int gra[N][N];
int vis[N][N];
int dx[4] = {1,0};
int dy[4] = {0,1};
// sum 是到目前为止的和
// num 是转弯的次数
void dfs(int x, int y,int flag, int sum, int num)
{
    if(sum > n) return ;
    if(num > ans) return ;
    if(x == m && y == m){
        if(sum == n){
            ans = min(ans,num);
        }
        return ;
    }

    for(int i = 0; i <= 1; i ++) {

        int tx = x + dx[i];
        int ty = y + dy[i];
        if(tx >= 1 && tx <= m && ty >= 1 && ty <= m && !vis[tx][ty]){
            vis[tx][ty] = 1;
           if(sum==1)
			dfs(tx,ty,i,sum+gra[tx][ty],num);
			else
			{
				if(i!=flag)
					dfs(tx,ty,i,sum+gra[tx][ty],num+1);
				else
					dfs(tx,ty,i,sum+gra[tx][ty],num);
			}
			vis[tx][ty]=0;
        }

    }
}

int main()
{
    scanf("%d %d", &m, &n);
    memset(vis,0,sizeof(vis));
    for(int i = 1; i <= m; i ++){
        for(int j = 1;j <= m; j ++){
            gra[i][j] = i;
        }
    }
    ans = inf;
    vis[1][1] = 1;
    dfs(1,1,0,1,0);
    printf("%d\n",ans);
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SDUT 2019 级程序设计基础(B)II 实验3–递推
下面兔子都以对为单位,可以看出第n天出生的是由第n-1天成年的和第n-1天新生的兔子(长大一天第n天可以生了)一起生的,而第n-1天出生的又由有第n-2天出生和成年的一起生的……如此递推,很容易得出第i天出生的兔子数:1 1 2 3 5……,同理总兔子数也可以求得为 1 2 3 5 8…即斐波那契数列。
Here_SDUT
2022/06/29
2070
SDUT 2019 级程序设计基础(B)II 实验3–递推
Fire Game (FZU 2150)(BFS)
题解:一开始想错了,以为只要烧完就是那个答案,但是这不是最优的结果,需要每两个点都bfs一遍,找到如果能够全部烧完,找到花费时间最小的,如果不能return -1。在bfs的时候,记录答案的方法参考了一下其他大神的思路,把能烧到地方都需要能够用个二维数组dis[ ]来标记烧到这个地方时所用的时间是多少。在经过一次两点的bfs后就需要找dis[ ]中最大的那个点,因为这一定是烧完的最后一个点。最后找能烧完的答案中最小的那个就可以了。
Lokinli
2023/03/09
2890
Oil Deposits (HDU - 1241 )(DFS思路 或者 BFS思路)
题解:每个点(为被修改,是#)进行一次dfs,每次dfs到的点,也就是八个方向都将  '#'  修改成  '*',下次dfs就不用再搜索这一点了,因为已经确定这个点和前面的点是一个部分,这样遍历一遍图,如果可以dfs(i,j),ans++,最后ans就是答案了。当然也可以用bfs思路来想(点一下我QWQ)。
Lokinli
2023/03/09
1980
搜索(DFS BFS)专题练习
题意:很简单的问题,就是一个地图,上面S是入口,然后E是出口。#代表陷阱不能走,问我们是否能够走出迷宫。
杨鹏伟
2020/09/10
4520
数据结构与算法——DFS(深度优先搜索)
深度优先搜索(Depth-First Search,简称DFS)是一种用于遍历或搜索树或图的算法。这种算法会尽可能深地搜索图的分支,直到找到目标节点或达到叶节点(没有子节点的节点),然后回溯到上一个分支继续搜索。DFS可以用于许多问题,比如路径寻找、连通性验证、拓扑排序等。
摆烂小白敲代码
2024/09/23
5760
数据结构与算法——DFS(深度优先搜索)
湖南大学程序设计竞赛新生赛(重现赛)
题目链接—点我开启传送门哦! A.题意:就是求任意两个斐波那契数列的最大公约数!
杨鹏伟
2020/09/11
5360
湖南大学程序设计竞赛新生赛(重现赛)
2022_HAUE_计算机学院暑期培训——BFS&DFS
描述 在图像编码的算法中,需要将一个给定的方形矩阵进行 Z 字形扫描(Zigzag Scan)。
浪漫主义狗
2022/07/11
8530
2022_HAUE_计算机学院暑期培训——BFS&DFS
P1443 马的遍历【BFS】
有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步
Lokinli
2023/03/09
2250
【算法/题目】:递归、搜索训练
全局变量:sum和path sum用于求异或和,path用来当进入某一层时,异或该数, 方法dfs : dfs(nums[],pos) 在pos那层 回溯:异或运算:消消乐(相同的数异或为0)
IsLand1314
2024/10/15
890
【算法/题目】:递归、搜索训练
暑假(补)-5
DFS全称Deep First Search,是一种遍历或搜索树或图的算法。在解决问题上,利用递归调用自身函数(这种说法好像不正确,领悟思想就好了)来实现搜索的目的。把一个事情拆解成若干个小事,来实现最终的问题。
AngelNH
2020/04/16
4340
网易2017春招笔试真题编程题集合题解
想想已经有一年多没有接触算法题了,忙活了一年多没什么用的东西,才陡然发现自己竟然就要毕业了,然而审视了下自己的水平估计还达不到大一的程度,甚是惊恐。于是下定决心开始刷一点题,打好基本功。正好有同学在做网易笔试题的时候来向我问问题,我看了看有12道,好像也不多,于是就顺便刷了刷。本以为会是一帆风顺的,可是事实是,我果然还是太菜了。。。
mythsman
2022/11/14
6000
DFS+记忆化搜索 -- 简单练习
题意:你要去滑雪,你想在整个场地上找到一条最长的路好让你能够滑的尽兴!那么你要找出这条路
杨鹏伟
2020/09/11
3960
C. Connect 【 BFS + 暴力 】
题意:给你一个 n * n 的图,给你起点和终点,只要是 0 的位置就可以随便移动,可以上下左右移动,问从起点到终点的最小距离的平方,这里的距离是欧几里得距离,可以通过走 0 来减小距离。
Lokinli
2023/03/09
2950
2021(ICPC)亚洲区域赛昆明站(CGHIJLM)
有n个城市,每个城市归某个议院管辖,每次可以选择相邻的几座归属于同一个议院的城市,将他们交给别的议院管辖,问最少的操作数使得最终全部城市归属一个议院。初始状态时,一个议院最多管辖15座城市。
Here_SDUT
2022/08/09
1.1K0
P1101 单词方阵【DFS】
给一n \times nn×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。例如:
Lokinli
2023/03/09
2840
“今天开火车了吗?”——ICPC World Final 队伍的独特训练方法?
总是能听到总决赛的选手们会时常讨论“今天开火车了吗?”,这到底是什么神奇的东西。难道是总决赛队伍所拥有的不为人知的独特训练方法吗?
ACM算法日常
2021/10/18
1.2K0
HDU 2389 Rain on your Parade(二分图最大匹配--Hopcroft-Karp算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2389        题意是天马上就要下雨了,然后有n个人,m把伞,然后分别给出人的坐标和他们跑的速度,
Ch_Zaqdt
2019/01/10
7342
2019 年第十届蓝桥杯省赛 B组 C++超详细题解
B 2.年号字串 思路:明显是个26进制好吧 那么 2019 = 2*26^2 + 25 * 26 + 17
杨鹏伟
2020/10/26
4850
数据结构与算法——BFS(广度优先搜索)
广度优先搜索(Breadth-First Search,简称BFS)是一种遍历或搜索树和图的算法,也称为宽度优先搜索,BFS算法从图的某个节点开始,依次对其所有相邻节点进行探索和遍历,然后再对这些相邻节点的相邻节点进行探索,直到遍历完所有的节点。BFS算法使用队列来辅助实现,将起始节点放入队列中,然后依次取出队列中的节点,访问其相邻节点,并将其加入队列。这样可以保证从起始节点出发,依次按照距离顺序遍历节点。BFS常用于寻找最短路径,因为它按照从起点到每个节点的距离来探索节点。
摆烂小白敲代码
2024/09/23
3240
数据结构与算法——BFS(广度优先搜索)
过河卒
P1002 过河卒 题目描述 棋盘上AAA点有一个过河卒,需要走到目标BBB点。卒行走的规则:可以向下、或者向右。同时在棋盘上CCC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示,AAA点(0,0)(0, 0)(0,0)、BBB点(n,m)(n, m)(n,m)(nnn, mmm为不超过202020的整数),同样马的位置坐标是需要给出的。 现在要求你计算出卒从AAA点能够到达BBB点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。 输入输出格式 输入格式:
glm233
2020/09/28
4840
相关推荐
SDUT 2019 级程序设计基础(B)II 实验3–递推
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验