很久之前我在数学建模晚自习时,我后面的人问问能不能把一个一笔画红包解开,我看了一下他手机的屏幕,密密麻麻的线条,一看就是为难人类,但是我想了想,这貌似可以用DFS来解,于是我就开始写,然后就有了这个文章;

我们先清楚一个QQ一笔画的规则,大多都是围绕点的性质,所以先介绍点的属性吧;

属性一:最多有25个点【所以我们可以用邻接矩阵来存储点之间的连线】

属性二:不存在重边,不存在自环

属性三:点与点之间的边无向

那么我们可以开始写代码了;

在写代码前先讲一下思路,这个思路是一个裸的不能再裸的DFS了,我们可以维护DFS走的边数,如果走完的话就之间返回路径就可以了,这边我们还需要一个数组来存储点出现的顺序;

#include<iostream>
using namespace std;
#define ll long long
const int N = 110;
int p[N][N], ar[N*N];
//p为邻接矩阵,ar为点出现的顺序
int cont, n;
//记录边数,n为点数
bool DFS(int x, int ceng) {//ceng为当前层数,x为当前层数的点的编号if (ceng == cont) {//当所有边都走完时返回路径ar[ceng] = x;for (int i = 0; i <= cont; i++) {cout << ar[i] << "  ";}return true;//返回结束循环}for (int i = 1; i <= n; i++) {if (p[x][i] == 1) {//遍历所有边,寻找可以走的边p[x][i] = p[i][x] = 0;//消除边ar[ceng] = x;//记录点出现的顺序;if (BFS(i, ceng + 1) == true)return true;//返回true代表已经找到路径;p[x][i] = p[i][x] = 1;//修复边}}return false;}
}
int main() {cin >> n;for (int i = 1; i <= n; i++) {//依次输入点1~n的边int x;while (cin >> x, x != 0) {p[i][x] = 1;//构建无向边p[x][i] = 1;cont++;}}for (int i = 1; i <= n; i++) {//从不同路口开始搜索if (BFS(i, 0))break;}
}

本菜鸟还是一个大一萌新,所以现在的知识还不足以搞定自动检测点之间的关系,只能靠手动....

我觉得生活中一些简单的算法运用还是挺好玩的

:)

DFS【深度优先搜索】的一个小小代码—破解QQ一笔画相关推荐

  1. 图:DFS(深度优先搜索)图解分析代码实现

    文章目录 一.简介 二.图的建立 2.1建立图类 2.2建立图 三.DFS 3.1图解 3.2代码 一.简介 图的DFS(深度优先搜索)与BFS(广度优先搜索)是图的两种遍历方式. 主要区别在于当到达 ...

  2. 【算法】蓝桥杯dfs深度优先搜索之排列组合总结

    [导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结>   为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...

  3. dfs深度优先搜索_图的深度优先搜索(DFS)

    dfs深度优先搜索 Depth First Search (DFS) is an algorithm that searches a graph/tree, in a depth-wise manne ...

  4. 【蓝桥杯C/C++】专题五:DFS深度优先搜索

    专题五:DFS深度优先搜索 目录 专题五:DFS深度优先搜索 前言 什么是回溯法 如何理解回溯法 回溯法解决的问题 回溯法模板 1 .回溯函数模板返回值以及参数 2. 回溯函数终止条件 3 .回溯搜索 ...

  5. DFS(深度优先搜索)算法实现

    2 DFS算法 DFS(深度优先搜索)算法,搜索过程是类似于不撞南墙不回头的意思,DFS一般使用堆栈(先入后出)这种数据结构实现,由此一来,以初始起点为中心进行搜索,首先是周围点加入到堆栈中,起始点搜 ...

  6. “暴力美学1”——DFS深度优先搜索

    作为新时代青年,"暴力"二字似乎离我们十分遥远,大多数时候我们只能够在电影或者电视剧上接触这个概念 暴力二字或许是个贬义词,但若是我们在后面加上美学二字,或许就是一个值得推敲的词汇 ...

  7. 张三踩瓷砖:C++用DFS深度优先搜索解POJ1979 Red and Black问题

    POJ1979 Red and Black 题目链接: POJ1979 Red and Black 简单理解一下题目: 张三站在一个长方形的房间里,房间里铺满了方形瓷砖,瓷砖有红色和黑色两种,他站在其 ...

  8. 【算法】蓝桥杯dfs深度优先搜索之图连通总结

    前言 上两篇文章 → <[算法]蓝桥杯dfs深度优先搜索之排列组合总结>      → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结>   为了重申感谢之意,第三次声明下文的 ...

  9. c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解

    采用搜索算法解决问题时,需要构造一个表明状态特征和不同状态之间关系的数据结构,这种数据结构称为结点.不同的问题需要用不同的数据结构描述. 根据搜索问题所给定的条件,从一个结点出发,可以生成一个或多个新 ...

最新文章

  1. 【Mybatis框架】从零开始学Mybatis框架——使用示例
  2. markdown 流程图_测试了12款Markdown编辑器,推荐一个最好用的!
  3. Python websocket
  4. Improving Opencv 6: The Core Functionality :Changing the contrast and brightness of an image!
  5. fluent瞬态计算终止条件在哪里设置_基于商用软件FLUENT的LES(大涡模拟)计算教学...
  6. 2021最新Java笔试题及答案,Java面试真题精选
  7. 二级mysql刷题_计算机二级通手机版(计算机二级刷题软件)V1.1 简化版
  8. 【商品架构day4】十年前淘宝商品系统怎么做平台化
  9. PD快充协议JD6606S资料
  10. mysql中有关视图的概念、操作及作用
  11. Ubuntu版本及对应的代号(4.10-22.04) 共18年整理
  12. 39元超值!360超级充电器拆解与评测
  13. 高通骁龙450智能模块msm8953 android 4G
  14. 高考助力海报|有哪些优秀的高考助力文案?
  15. 申请GitHub学生包,0成本搭建WordPress教程
  16. yyyy-mm-dd与yyyy-MM-dd的区别
  17. 几款漂亮的Eclipse编辑器皮肤 .
  18. ps怎么把白色背景变透明
  19. 多小波分解2-D图像
  20. 国内计算机视觉CV方向的大牛/导师

热门文章

  1. 基于javaweb的报销erp系统(java+ssm+jsp+layui+jquery+mysql)
  2. java学习体会论文_关于学习java的心得体会
  3. 半导体器件仿真与工艺综合设计 01- | 二极管器件仿真
  4. Fire Net 放碉堡 —— DFS
  5. 【linux】持续集成与持续发布CICD
  6. php软文推广一键发布系统开源手册
  7. MediaPlayer的使用
  8. 一篇文带你了解JDK 13新特性,保姆级教程!!!
  9. 如何提高企业会议管理的“执行力”
  10. k8s之StorageClass(NFS)