深度优先搜索(DFS)和广度优先搜索(BFS)

matlab练习程序(广度优先搜索BFS、深度优先搜索DFS) 如此经典的算法竟一直没有单独的实现过,真是遗憾啊。 广度优先搜索在过去实现的二值图像连通区域标记和prim最小生成树算法时已经无意识的用到了,深度优先搜索倒是没用过。 这次单独的将两个算法实现出来,因为算法本身和图像没什么关系,所以更纯粹些。 广度优先搜索是从某一节点开始,搜索与其线连接的所有节点,按照广度方向像外扩展,直到不重复遍历所有节点。 深度优先搜索是从某一节点开始,沿着其搜索到的... 阅读详情

DFS和BFS

基础算法合集:
https://blog.youkuaiyun.com/GD_ONE/article/details/104061907

摘要

本文主要介绍 深度优先搜索和广度优先搜索,下文皆称为DFS和BFS。

DFS和BFS是两种搜索树和图的基本策略,见名知其义, 深搜和广搜,一种往深处搜,一种往边上搜。 DFS常用于暴力搜索所有状态,BFS常用于搜索到达某一状态的最短路径。


状态

我们将DFS和BFS搜索的东西称为状态, 状态就是一个具体问题的一个解,而将问题的所有状态关联在一起, 就能得到一个状态图,DFS和BFS就是遍历状态图的两种方式。

下面以几个具体问题来加以解释:

  1. 输出123的全排列

    对于此题,将123数列的三个位置看作三个状态,当3个位置都填满数字时,就是其中一种排列,显然,答案就是所有当搜索完所有位置的所有状态。那么我们就可以使用DFS来找出所有状态。
    部分状态图:

在这里插入图片描述
以上状态图中, 蓝色箭头是DFS的搜索顺序,对以上状态图的解释:对于第一位,有3种状态,1 2 3, 先选1, 然后看第二位, 1已经选过了,只能选2,3,选择2, 然后第三位就只剩下了3, 得到123,然后再将第二位选择为3, 则第三位为2, 得到132.
可以看到,状态图是树形结构。一个状态总能从根节点(起始状态)转移得到。

  1. 用一个3*3的二维矩阵代表一个迷宫,由0,1组成,1代表可以通过,0代表不能通过。要求找出从入口(1,1)到出口(n,n)的最短路径

    对于此题,每个可以从入口到达的点,都是一个状态,那么从一层一层的搜,到达出口时的层数就是最短路径的长度了。

    部分状态图:

在这里插入图片描述
对于以上状态图, X代表当前位置, 1 2 3代表BFS搜索的层数, 当搜索完第 1 层,搜索第 2 层,第 2 层搜索完才会搜索第 3 层。


DFS

我们已经知道DFS是沿着当前路径一直搜索下去,直到无路可走,就会返回,这被称为 回溯
我们可以利用递归的方式来实现这一回溯效果。

public class Main{
	public  static int f(int n){
		if(n == 0){
			return n; 
		}
		
		System.out.print(n+"\n");
		f(n-1);
		System.out.print(n+"\n");
		
		return n;
	}
	public static void main(String[] args) throws IOException {
		f(3);
	}
	
}
输出:
3
2
1
1
2
3

函数执行顺序:

  1. main中调用f()函数
  2. n刚开始等于 3, 先输出3 然后调用f(n-1); // 第一层函数
  3. n等于2, 输出2, 然后调用f(n-1) ; // 第二层函数
  4. n等于1, 输出1, 然后调用f(n-1); //第三层函数
  5. n等于0, 返回到上一次函数, 即第三层函数。然后输出1
  6. 然后再返回到第二层, 输出2
  7. 最后返回第一次, 输出1.
  8. f()函数结束。

这就是回溯的实质了。

看一道例题:
Red and Black

在这里插入图片描述
题目大意就是从起始位置@开始走,只能走在 . (黑砖)上面, 不能走在#(红砖)上面,问从@开始最多可以走几块 .(黑砖)。

将每个可以到达的点当作一个状态,搜索所有的状态,就可以得到答案啦。
怎么搜索呢, 只要我们得到下个点的坐标就可以了, 可以朝四个方向走,
所以,当前坐标 + (0,1) 就是向右走, + (1,0)就是向下走, + (0,-1)就是向左走, +(-1, 0)就是向上走。

然后判断一下个点是否超出边界是红砖还是黑砖,如果是黑砖,就搜索下一点,也就是DFS下一个点。
本题也可BFS。

本题坑点: @点也算一个答案。
具体看代码
C++:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int x,y,sum=1;
int n,m; // 行   列
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
char map[20][20];
int book[20][20];

void input(int n,int m){ // 读入数据,并记录@坐标
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			cin>>map[i][j];
			if(map[i][j]=='@')
				x=i,y=j;
		} 
	}
}

void dfs(int x,int y){
	for(int i=0;i<4;i++){
		int gx=x+next[i][0];
		int gy=y+next[i][1];
		if(gx>=0&&gx<m&&gy>=0&&gy<n&&book[gx][gy]!=1&&map[gx][gy]=='.'){
			sum++;
			book[gx][gy]=1; // 标记已经走过。则下次不再走这个点
			dfs(gx,gy);
		}
	}
	return;
}

int main()
{
	while(cin>>n>>m&&n||m)
	{
		memset(map,0,sizeof map);
		memset(book,0,sizeof book);
		input(n,m);
		dfs(x,y);
		cout<<sum<<endl;
		sum=1;
	}
	return 0;
}

JAVA:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class Main{
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
	static char[][] map = new char[30][30];
	static int[][] vis = new int[30][30];
	static int[][] ne = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
	static int n, m, res = 0;
	public static void dfs(int x, int y){
		vis[x][y] = 1;
		for(int i = 0; i < 4; i++){ //四个方向
			int nx = x + ne[i][0];
			int ny = y + ne[i][1];
			if(nx < 0 || nx >= m || ny < 0 || ny >= n || map[nx][ny] == '#' || vis[nx][ny] == 1){
				continue;
			}
			res++;
			dfs(nx,ny);
		}
	}
	
	public static void main(String[] args) throws IOException{
		while(true){
			
			String s[] = in.readLine().split(" ");
			n = Integer.parseInt(s[0]);
			m = Integer.parseInt(s[1]);
			if(n==0||m==0) break;
			int x = 0, y = 0;
			res = 0;
			for(int i = 0; i < vis.length; i++)
				Arrays.fill(vis[i], 0);
			for(int i = 0; i < m; i++){
				String s1 = in.readLine();
				if(s1.indexOf('@') != -1){
					x = i;
					y = s1.indexOf('@');
				}
				map[i] = s1.toCharArray();
			}
			dfs(x, y);
			out.write((res+1)+"\n");
			out.flush();
		}
	}
	
}


BFS

BFS要先搜索当前状态可以直接到达的所有状态。因为一次只能处理一个状态,所以我们需要按照先后顺序,先将可以到达的所有状态点全部存起来,因为需要满足先后的顺序,所以正好可以利用队列先进先出的特性来存储。

以下是一般的BFS模板

 public static void bfs(int x, int y){
    	q.add(x, y);  //将起点入队
    	vis[x][y] = 1; // 标记已经走过
    	res[x][y] = 0; // 标记起点的步数
    	while(!q.isEmpty()){ // 当队列不空
    		x = q.peek().x; //取出队头元素
    		y = q.peek().y; 
    		q.poll(); //删除队头元素
    		if(x == n-1 && n == m-1) return; // 到达终点
    		for(int i = 0; i < 4; i++){ // 当前点可以到达的下四个方向
    			int nx = x + dx[i]; // 下个点的坐标
    			int ny = y + dy[i]; 
    			if(nx < 0 || nx >= n || ny < 0 || ny >= m || vis[nx][ny] == 1 ) continue; // 下个点不合法
    			else{
    			    res[nx][ny] = res[x][y] + 1; // 到达下一个点的步数为此父结点的步数加1
    			    q.add(new pair(nx,ny));	//下个点合法,入队存储
    			    vis[nx][ny] = 1; // 标记该点已经走过
    			}
    		}
    	}
    }

用走迷宫来解释, 就是先把一个点可以直接到达的所有点存到一个队列里,
然后从这些点里每次出队一个,进行上述操作,直到所有可到达的点都被搜索过。

例题:
走迷宫

在这里插入图片描述
JAVA代码:

import java.io.*;
import java.util.*;


class pair{
	public int x,y;
	pair(int a, int b){
		x = a;
		y = b;
	}
}

public class Main{
    static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
 
    static final int N = 1000;
    static String[][] arr = new String[N][N];
    static int[][] pren = new int[N][N];
    static int[][] vis = new int[N][N];
    static int[][] res = new int[N][N];
    static int[] dx = {-1, 0, 1, 0};
    static int[] dy = {0, 1, 0, -1};
    static int n, m = 0;
    static Queue<pair> q = new LinkedList<>();
    
    public static int Int(String s){ return Integer.parseInt(s);}
    
    
    public static void read() throws IOException{
    	for(int i = 0; i < n; i++){
    		arr[i] = in.readLine().split(" ");
    	}
    }
    public static void bfs(int x, int y)throws Exception{
    	q.add(new pair(x, y));
    	vis[x][y] = 1;
    	res[x][y] = 0;
    	while(!q.isEmpty()){
    		x = q.peek().x;
    		y = q.peek().y;
    		q.poll();
    		for(int i = 0; i < 4; i++){
    			int nx = x + dx[i];
    			int ny = y + dy[i];
    			if(nx < 0 || nx >= n || ny < 0 || ny >= m || vis[nx][ny] == 1 || arr[nx][ny].compareTo("1") == 0) continue;
    			else{
    			    res[nx][ny] = res[x][y] + 1;
    			    q.add(new pair(nx,ny));	
    			    vis[nx][ny] = 1;
    				if(nx == n-1 && ny == m-1) return;
    			}
    		}
    	}
    }
    public static void main(String[] args) throws Exception{
    	String s[] = in.readLine().split(" ");
    	n = Int(s[0]);
    	m = Int(s[1]);
    	read();
    	bfs(0,0);
    	out.write(res[n-1][m-1]+"\n");
    	out.flush();
    }
}

刷题题目集:
POJ 1321 棋盘问题
POJ 2251 Dungeon Master
POJ 3278 Catch That Cow
POJ 3279 Fliptile
POJ 1426 Find The Multiple
POJ 3126 Prime Path
POJ 3087 Shuffle’m Up
POJ 3414 Pots
FZU 2150 Fire Game
UVA 11624 Fire!
POJ 3984 迷宫问题
HDU 1241 Oil Deposits
HDU 1495 非常可乐
HDU 2612 Find a way
题目链接

题目集题解:https://blog.youkuaiyun.com/GD_ONE/article/details/100833175

开始刷题吧!

python实现BFS(广度优先搜索)& DFS(深度优先搜索) BFS(广度优先搜索): 图1 BFS 图2 BFS 图3 Queue of BFS 图一是BFS(广度优先搜索)在树的情况下的执行过程,从A出发,搜索A的第二层,发现有B,C,D(必须从左到右搜索),再搜索B的第二层,发现B的第二层没有元素,再搜索C的第二层,发现有E,F,放置于D后面,再搜索D的第二层,发现有G,放置于F后面,再往下搜索E,F,G,发现只有G有第二层H和I,所以最后得到: A B C D E F G H I 图二是BF.. 阅读详情

相关推荐

深度优先搜索(DFS)和广度优先搜索(BFS)——c#实现

两种算法在您的迷宫项目中可以配合使用:DFS生成随机迷宫,BFS寻找最优路径,这正是大多数迷宫算法的经典实现方式。沿着分支尽可能深入,直到到达叶子节点,然后回溯探索其他分支。内存敏感/深度优先特性 → 选DFS(如迷宫生成)层级关系分析 → 选BFS(如社交网络层级分析)类似走迷宫时优先选择一条路走到黑,碰壁再回退。存在性验证 → 两者均可(如节点是否可达)需要最短路径 → 选BFS(如迷宫求解):O(V+E)(顶点数+边数):栈(Stack)或递归实现。类似水波纹扩散的效果。:队列(Queue)

山水CAD 二次开发 1254

深度优先搜索(DFS)(算法笔记)

深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法,总是以“深度”作为前进的关键词。实现方式是有很多,最常见的是递归。深度优先搜索属于搜索问题的一种,当问题可以被描述为“路径搜索”时,就可以采用搜素问题的所有解的方式来进行解决,所以DFS本质还是暴力。深度搜索具有两个关键词,即“岔道口”和“死胡同”,这两个词来源于迷宫问题,这也是搜索问题最原始的表现。当碰到岔道口时,总是以“深度”作为前进的关键词,不碰到死胡同就不回头,因此被称为“深搜”。

Arabot_的博客 1万+

一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】

写在前面:博主是一位普普通通的19届二本大学生,平时最大的爱好就是听听歌,逛逛B站。博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事,做自己以后不会留有遗憾的事,做自己觉得有意义的事,不浪费这大好的青春年华。博主写博客目的是记录所学到的知识并方便自己复习,在记录知识的同时获得部分浏览量,得到更多人的认可,满足小小的成就感,同时在写博客的途中结交更多志同道合的朋友,让自己在技术的路上并不孤单。 目录: 1.深度优先搜索(DFS) 2. .

记录博主学到的点滴 3573

蓝桥杯——深搜DFS(看完绝对入门DFS)

一文详解DFS,看完绝对入门(附练习题和详解)

m0_47963315的博客 6358

【C语言 DFS(深度优先搜索)和BFS(广度优先搜索)】

DFS(深度优先搜索)和BFS(广度优先搜索)是两种常用的图或树遍历算法。其主要思想是从起始节点开始,沿着每一个分支尽可能深入地搜索,直到找到目标节点或没有更多节点可访问,然后回溯并继续搜索其他分支。其主要思想是从起始节点开始,首先访问所有邻接节点,然后再按层次访问每个邻接节点的邻接节点。DFS 遍历顺序可能是:A -> B -> D -> E -> C -> F。BFS 遍历顺序是:A -> B -> C -> D -> E -> F。BFS 是一种遍历或搜索树或图的算法。

m0_74889573的博客 1552

Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS )

深度优先搜索( DFS )和广度优先搜索( BFS )是两种常用的图遍历算法,用于在图中搜索目标节点或遍历图的所有节点。本篇博客将介绍 DFS 和 BFS 算法的基本概念,并通过实例代码演示它们的应用。

小蓝枣的博客 1万+

深度优先算法 DFS总结(算法详解+模板+例题)

沿着树的深度遍历树的节点,尽可能深的搜索树的分支。共 m+1 行,第 1 行为 2 个数,n 和 m,分别表示一共有 n(n≤105) 篇文章(编号为 1 到 n)以及m(m≤106) 条参考文献引用关系。一个如下的 6×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。有一个 n \times mn×m 的棋盘,在某个点 (x, y)(x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。

Alex_Fufu的博客 1万+

LightTools宏 vs Python API:光学仿真自动化方案选型指南

本文深入对比了LightTools光学仿真自动化中VBA宏与Python API两种方案。VBA宏内嵌易用,适合固定流程批处理;Python API生态强大,尤其在参数优化算法集成方面优势显著,便于构建复杂工作流。文章结合案例,为不同场景下的技术选型提供清晰指南。

garlic的博客 940

深度优先搜索(DFS) 总结(算法+剪枝+优化总结)

深度优先搜索(DFS) 总结(算法+剪枝+优化总结) 本文中会引用部分实例、文献资料来自不同的作者之手,由于资料整理比较困难,转载地址不在文中列举。如有侵权请联系我更换或删除!对于提供题解思路的各位大佬和作者:非常感谢! 一、前导 定义上的深度优先搜索的思路与树的先序遍历非常相似,是针对图的搜索而提出的一种算法,下面是算法导论上的解释: 在深度优先搜索中,对于最新发现的顶点,如果它还有以此为顶点而未探测到的边,就沿此边继续探测下去,当顶点v的所有边都已被探寻过后,搜索将回溯到发现顶点v有起始点的那些边

HeartFireY的博客 9万+

华硕笔记本键盘失灵恢复方法全解析

华硕笔记本键盘失灵问题可能由多种原因导致,但大多数问题都可以通过上述方法得到解决。在尝试恢复键盘功能时,请务必按照步骤操作,并注意备份重要数据。如果问题依然存在,请寻求专业维修人员的帮助。希望本文能够帮助大家快速解决华硕笔记本键盘失灵的问题!

mmoo_python的博客 4227

基于深度强化学习技术优化无线网络中的资源分配(一)DQN部分代码

这是一个GitHub上的开源项目,链接:https://github.com/alexis-anzaldo/Deep-Reinforcement-Learning-for-resource-allocation-in-wireless-networks该项目旨在通过深度强化学习DQL技术优化无线网络中的资源分配,特别关注小型蜂窝和超密集无线蜂窝网络中的功率控制问题,主要目标是提高DRL模型的学习效率和网络吞吐量。

m0_46292040的博客 1538

DFS——深度优先搜索

深度优先搜索,是一种常用的图遍历算法,用于在图或树数据结构中遍历所有节点。

m0_74421524的博客 4687

自动驾驶嵌入式修炼秘籍:理想L9自动驾驶域控制器拆解

自动驾驶嵌入式修炼秘籍:理想L9自动驾驶域控制器拆解

pathfinder888的博客 2548

深度优先搜索(DFS)和广度优先搜索(BFS)

DFS && BFS

weixin_43955293的博客 3万+

AD/Protel老手才知道的PCB过孔查看技巧:3分钟分清通孔、盲孔和埋孔

本文为PCB设计工程师提供了在Altium Designer/Protel中快速鉴别通孔、盲孔和埋孔的实用技巧。通过层叠管理器、高级筛选工具和实战五步法,帮助用户在3分钟内精准识别过孔类型,提升设计效率和电路性能。特别适合处理高密度HDI板卡中的复杂过孔布局。

weixin_29164497的博客 575

从零到一破解Uber实时行程API:逆向工程与高并发爬虫实战

在数据采集领域,Uber的实时行程数据始终处于“传说级”难度。动态令牌系统- 每30秒轮换的Bearer Token证书固定(Certificate Pinning)- 阻止中间人攻击请求签名算法- 基于时间戳+用户设备的HMAC-SHA256行为分析- 鼠标轨迹、请求间隔的机器学习模型全链路加密- GraphQL端点的payload加密目录前言:为什么Uber爬虫被称为“地狱难度”?第一章:环境准备与法律边界1.1 技术栈选择(2026年最新)1.2 法律免责声明。

2201_76125261的博客 892

深度优先搜索(DFS)和广度优先搜索(BFS)两种算法c++

本文介绍了BFS和DFS两种算法及其实现过程,以及通过这两种算法解决迷宫复杂问题和七段码问题的解题思路以及完整代码展示!

CRainink的博客 1万+

FISCO BCOS 系列(一)—— 搭建第一个区块链网络&配置控制台指南

本文详细介绍了FISCO BCOS区块链网络的搭建与配置过程,包括环境准备、单机四节点网络搭建、控制台配置使用等核心内容。从系统要求、依赖安装开始,逐步指导如何通过脚本快速搭建区块链网络,配置控制台连接,并演示了账户管理、合约部署调用等基础操作。同时提供了多节点网络配置、常见问题解决方案以及生产环境安全建议,为开发者提供了从入门到进阶的完整指南。

分享AI、区块链技术及应用,未来已来 809

图的广度优先搜索(BFS)和深度优先搜索(DFS)算法解析

BFS/DFS算法解析【算法入门]2018/6/21.前言和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次。但是图的遍历相对树而言要更为复杂。因为图中的任意顶点都可能与其他顶点相邻,所以在图的遍历中必须记录已被访问的顶点,避免重复访问。根据搜索路径的不同,我们可以将遍历图的方法分为两种:广度优先搜索和深度优先搜索。2.图的基本概念2.1.无向图和无向...

weixin_40953222的博客 17万+

Alist/Openlist 的 WebDAV 老是连不上?别再乱试了,这才是标准答案!(1Panel如何使用Alist/Openlist作为备份账号)

😫服务器硬盘告急,想用 Alist/Openlist 的 WebDAV 备份却屡屡失败?别慌!本文带你揭秘正确的连接地址和权限配置,手把手教你搞定 1Panel 备份设置,让你的网盘秒变备份仓库!

XiaoqiangClub的博客 5589

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

图的邻接矩阵、邻接表存储和图的广度优先搜索(BFS)、深度优先搜索(DFS)

图的邻接矩阵和邻接表表示。广度优先搜索(BFS)、深度优先搜索(DFS)及 C++ 实现。

Dong_HFUT的博客 8300

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度优先搜索(DFS)和广度优先搜索(BFS)(学习总结)

深度优先搜索: ①定义:是一种枚举所有完整路径以遍历所有情况的搜索方法。 ②如何实现DFS: 使用栈较麻烦。 类比斐波那契数列,可以使用递归这种方式来实现DFS。使用递归系统会调用叫系统栈的东西存放递归中的每一层状态,本质还是栈实现。 ③例子 (1)全排列 求1 2 3或1 2 3 4全排列可以使用几个for循环解决,但当求1到n(n小于等于10)用for不能解决则利用递归。 #include <iostream> using namespace std; int n; int book[20]

xiaotutuyahttp_的博客 5457

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

广度优先搜索(BFS)与深度优先搜索(DFS)的对比及优缺点

广度优先搜索(BFS)与深度优先搜索(DFS)的对比及优缺点 深搜,顾名思义,是深入其中、直取结果的一种搜索方法 如果深搜是一个人,那么他的性格一定倔得像头牛!他从一点出发去旅游,只朝着一个方向走,除非路断了,他绝不改变方向!除非四个方向全都不通或遇到终点,他绝不后退一步!因此,他的姐姐广搜总是嘲笑他,说他是个一根筋、不撞南墙不回头的家伙。 深搜很讨厌他姐姐的嘲笑,但又不想跟自己的亲姐姐闹矛盾,于...

身在边城 心在编程 2万+

C++ 图的深度优先搜索(DFS)和广度优先搜索(BFS)

一、图的深度优先搜索和广度优先搜索 1.图的深度优先搜索: 类似树的前序遍历 2.图的广度优先搜索: 类似树的层次遍历 二、实现程序: 1.Graphlnk.h #ifndef Graphlnk_h #define Graphlnk_h #include <iostream> #include <queu...

ChanJose的博客 1636
上一篇: 递归
下一篇: 最短路问题的五种算法
Androids_lost_Sheep
博客等级 码龄8年 1022粉丝 86原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值