蓝桥杯-方格分割-dfs

标题:方格分割

6x6的方格,沿着格子的边线剪开成两部分。

要求这两部分的形状完全相同。

如图:p1.png, p2.png, p3.png 就是可行的分割法。

试计算:

包括这3种分法在内,一共有多少种不同的分割方法。

注意:旋转对称的 属于同一种分割法。

请提交该整数,不要填写任何多余的内容或说明文字。

阿西吧,这道题真的是,绝望,本来的思路是分别从左上角和右下角各引出一条线路,按走过的表格数进行计算,忘记了dfs是一头撞到南墙不回头不能有岔路的那种,于是乎按照格子来走是不行了,去网上找了找大神的思路,果然是大神,我咋着就没有想到换个角度来看,不只是盯着表格,线呢!还有线呢!看线啊!还有人家是从中心开始的,中心是必经之路啊,无论怎样中心都是对称中心,真的是,最后,总结就是从中心兵分两路,沿线直到抵达边境,就算是一种结果,同样还是用dfs但是换了一个角度了。跪。还有就是注意点在于题上已经提示了旋转相同的只能算是一种结果,所以不要忘记除个4啊亲!都是一样的啊!委屈巴巴

#include<iostream>
using namespace std;
#define n 6
int board[n+1][n+1];
int cou =0;   //表示对称图形个数
struct coor{
    int i;
    int j;
};

coor direct1[4]= {{-1,0},{1,0},{0,-1},{0,1}},direct2[4] = {{1,0},{-1,0},{0,1},{0,-1}};
/*
答案509
思路:1、首先初始化棋盘未走过为0
      2、分析第一部分上下左右{(-1,0),(1,0),(0,-1),(0,1)}对称于第二部分下上右左{(1,0),(-1,0),(0,1),(0,-1)}
      3、两部分分别向四方进行试探,如果某方都没有走过则可将下一步置1,然后继续进行递归
*/

 void init()
 {
     for(int i=0;i<=n;i++)   //初始化棋盘
     {
         for(int j=0;j<=n;j++)
         {
             board[i][j] = 0;
         }
     }
     board[3][3] = 1;
 }

 bool check(coor next1,coor next2)   //检查此位置是否可以走,如果可以返回true
 {
     if(board[next1.i][next1.j] == 0&&board[next2.i][next2.j] == 0)
     {
         if(next1.i ==next2.i&&next1.j == next2.j){
             return false;
         }
         return true;
     }
     return false;
 }

void DFS(coor part1,coor part2)
{
    if(part1.i == 0||part1.j == 0||part1.j == n||part1.i == n)
    {
        ++cou;
        return ;
    }
    coor next1,next2;
    for(int i=0;i<4;i++)
    {
        next1.i= part1.i+direct1[i].i;
        next1.j= part1.j+direct1[i].j;
        next2.i= part2.i+direct2[i].i;
        next2.j= part2.j+direct2[i].j;

        if(check(next1,next2))
        {
            board[next1.i][next1.j] = board[next2.i][next2.j] = 1;//表示已经被走
            DFS(next1,next2);
            board[next1.i][next1.j] = board[next2.i][next2.j] = 0;
        }
    }
}

int main()
{
    coor start1,start2;
    start1.i = start1.j = 3;
    start2.i = start2.j = 3;
    init();
    DFS(start1,start2);
    cout<<cou/4;
    return 0;
}

原文地址:https://www.cnblogs.com/desserts/p/8468136.html

时间: 2024-10-09 10:31:08

蓝桥杯-方格分割-dfs的相关文章

蓝桥杯 - 带分数 (DFS)

历届试题 带分数 时间限制:1.0s   内存限制:256.0MB 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0). 类似这样的带分数,100 有 11 种表示法. 输入格式 从标准输入读入一个正整数N (N<1000*1000) 输出格式 程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数. 注意:不要求输出每个表示,

蓝桥杯 地宫寻宝 DFS 动态规划

#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> #include <queue> using namespace std; const int maxn = 100; const long long INF = 10000000

蓝桥杯 方格填数 回溯法

方格填数 如下的10个格子   +--+--+--+   |  |  |  |+--+--+--+--+|  |  |  |  |+--+--+--+--+|  |  |  |+--+--+--+ (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 回溯法解决的源代码如下: #include<ios

方格分割 蓝桥杯心得

标题:方格分割 6x6的方格,沿着格子的边线剪开成两部分.要求这两部分的形状完全相同. 如图:p1.png, p2.png, p3.png 就是可行的分割法. 试计算:包括这3种分法在内,一共有多少种不同的分割方法.注意:旋转对称的属于同一种分割法. 请提交该整数,不要填写任何多余的内容或说明文字. 一开始想的是按着一个方块一个方块搜索,但是没有考虑到dfs只能是一笔画!!!所以样例的所有情况都没考虑到下面是我比赛的时候写的代码(知道结果的时候还是比较伤心的,花了大把的时间最后还是入坑了  哎

蓝桥杯 地宫寻宝 带缓存的DFS

最近一个问题很困扰我,今天则得到了答案,也意味着我该选择了. 不知道大家有没有遇到过这样的情况,我是上年刚毕业,大四时进行过java培训,12年9月-13年4月,在这之前已经自学过java.7月份时进入一家公司工作,今年3月份辞职,4月份找到工作,来上班了.一开始就不太喜欢公司氛围,前台,hr,态度什么的都不太好,工作环境也极像客服部,整天电话不断,讨论声不断,第一个星期真是煎熬,去了两三天之后有辞职的想法,但是后面想想还是算了,公司待遇还可以. 但是进入到公司后leader让学PHP,学PHP

第七届蓝桥杯C语言C组-(自己懂的题目)

第七届蓝桥杯C语言C组-(自己懂的题目) 表示刚刚查了成绩,省赛一等奖,有资格去北京了,然后写一下总结, 先来写一下我懂的题目,毕竟我也是菜鸟,听说国赛比预赛难几个等级... 第一题 报纸页数 X星球日报和我们地球的城市早报是一样的, 都是一些单独的纸张叠在一起而已.每张纸印有4版. 比如,某张报纸包含的4页是:5,6,11,12, 可以确定它应该是最上边的第2张报纸. 我们在太空中捡到了一张X星球的报纸,4个页码分别是: 1125,1126,1727,1728 请你计算这份报纸一共多少页(也就

2016年蓝桥杯C/C++B组

第一次参加蓝桥杯,也是有很多感触的,时间完全不够写最后一题... 最后一题没做...还有全排序很重要... 1. 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), -. 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. /*答案:171700*/ #include <iostream> #include &l

算法-蓝桥杯习题(六)

蓝桥杯习题 蓝桥杯练习系统习题加答案,总共分为6部分,90%习题使用C语言解答,部分使用C++或者Java.大部分习题为搜索参考或者别人提供所得,不足之处在所难免,恳请批评指正(预计200多题,习题仅供学习交流) 目录 算法训练(详见 算法-蓝桥杯习题(一))Go 算法训练(详见 算法-蓝桥杯习题(二))Go 算法提高(waiting...) 历届试题(详见 算法-蓝桥杯习题(六))Go 历届试题(详见 算法-蓝桥杯习题(七))Go 蓝桥杯练习系统评测数据 链接: http://pan.baid

算法-蓝桥杯习题(四)

蓝桥杯习题 蓝桥杯练习系统习题加答案,总共分为6部分,90%习题使用C语言解答,部分使用C++或者Java.大部分习题为搜索参考或者别人提供所得,不足之处在所难免,恳请批评指正(预计200多题,习题仅供学习交流) 目录 算法训练(详见 算法-蓝桥杯习题(一))Go 算法训练(详见 算法-蓝桥杯习题(二))Go 算法提高(waiting...) 历届试题(详见 算法-蓝桥杯习题(六))Go 历届试题(详见 算法-蓝桥杯习题(七))Go 蓝桥杯练习系统评测数据 链接: http://pan.baid