DFS【深度优先搜索】的一个小小代码—破解QQ一笔画
很久之前我在数学建模晚自习时,我后面的人问问能不能把一个一笔画红包解开,我看了一下他手机的屏幕,密密麻麻的线条,一看就是为难人类,但是我想了想,这貌似可以用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一笔画相关推荐
- 图:DFS(深度优先搜索)图解分析代码实现
文章目录 一.简介 二.图的建立 2.1建立图类 2.2建立图 三.DFS 3.1图解 3.2代码 一.简介 图的DFS(深度优先搜索)与BFS(广度优先搜索)是图的两种遍历方式. 主要区别在于当到达 ...
- 【算法】蓝桥杯dfs深度优先搜索之排列组合总结
[导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结> 为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...
- dfs深度优先搜索_图的深度优先搜索(DFS)
dfs深度优先搜索 Depth First Search (DFS) is an algorithm that searches a graph/tree, in a depth-wise manne ...
- 【蓝桥杯C/C++】专题五:DFS深度优先搜索
专题五:DFS深度优先搜索 目录 专题五:DFS深度优先搜索 前言 什么是回溯法 如何理解回溯法 回溯法解决的问题 回溯法模板 1 .回溯函数模板返回值以及参数 2. 回溯函数终止条件 3 .回溯搜索 ...
- DFS(深度优先搜索)算法实现
2 DFS算法 DFS(深度优先搜索)算法,搜索过程是类似于不撞南墙不回头的意思,DFS一般使用堆栈(先入后出)这种数据结构实现,由此一来,以初始起点为中心进行搜索,首先是周围点加入到堆栈中,起始点搜 ...
- “暴力美学1”——DFS深度优先搜索
作为新时代青年,"暴力"二字似乎离我们十分遥远,大多数时候我们只能够在电影或者电视剧上接触这个概念 暴力二字或许是个贬义词,但若是我们在后面加上美学二字,或许就是一个值得推敲的词汇 ...
- 张三踩瓷砖:C++用DFS深度优先搜索解POJ1979 Red and Black问题
POJ1979 Red and Black 题目链接: POJ1979 Red and Black 简单理解一下题目: 张三站在一个长方形的房间里,房间里铺满了方形瓷砖,瓷砖有红色和黑色两种,他站在其 ...
- 【算法】蓝桥杯dfs深度优先搜索之图连通总结
前言 上两篇文章 → <[算法]蓝桥杯dfs深度优先搜索之排列组合总结> → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结> 为了重申感谢之意,第三次声明下文的 ...
- c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解
采用搜索算法解决问题时,需要构造一个表明状态特征和不同状态之间关系的数据结构,这种数据结构称为结点.不同的问题需要用不同的数据结构描述. 根据搜索问题所给定的条件,从一个结点出发,可以生成一个或多个新 ...
最新文章
- 【Mybatis框架】从零开始学Mybatis框架——使用示例
- markdown 流程图_测试了12款Markdown编辑器,推荐一个最好用的!
- Python websocket
- Improving Opencv 6: The Core Functionality :Changing the contrast and brightness of an image!
- fluent瞬态计算终止条件在哪里设置_基于商用软件FLUENT的LES(大涡模拟)计算教学...
- 2021最新Java笔试题及答案,Java面试真题精选
- 二级mysql刷题_计算机二级通手机版(计算机二级刷题软件)V1.1 简化版
- 【商品架构day4】十年前淘宝商品系统怎么做平台化
- PD快充协议JD6606S资料
- mysql中有关视图的概念、操作及作用
- Ubuntu版本及对应的代号(4.10-22.04) 共18年整理
- 39元超值!360超级充电器拆解与评测
- 高通骁龙450智能模块msm8953 android 4G
- 高考助力海报|有哪些优秀的高考助力文案?
- 申请GitHub学生包,0成本搭建WordPress教程
- yyyy-mm-dd与yyyy-MM-dd的区别
- 几款漂亮的Eclipse编辑器皮肤 .
- ps怎么把白色背景变透明
- 多小波分解2-D图像
- 国内计算机视觉CV方向的大牛/导师
热门文章
- 基于javaweb的报销erp系统(java+ssm+jsp+layui+jquery+mysql)
- java学习体会论文_关于学习java的心得体会
- 半导体器件仿真与工艺综合设计 01- | 二极管器件仿真
- Fire Net 放碉堡 —— DFS
- 【linux】持续集成与持续发布CICD
- php软文推广一键发布系统开源手册
- MediaPlayer的使用
- 一篇文带你了解JDK 13新特性,保姆级教程!!!
- 如何提高企业会议管理的“执行力”
- k8s之StorageClass(NFS)