面试:BFS解迷宫问题,并打印最短路径

华为机考第三题--迷宫路径(BFS) 前言 昨天做了华为的机考,前两题挺简单的,不像是考察算法,这个机考600分,100分及格,感觉像是送分题,这里不做详述,第三题就是迷宫两点间的最短路径,刚开始刷题,没见过,想着用递归,拿着他的测试样本怼递归,只通过了20%,参考了网上的[迷宫路径],学习了一下并做个记录。 Input: 2,2 0,0 2,2 3 0,1 2,0 2,1 输入详解: (2,2) 表示迷宫的长宽, (0,0)表示起点... 阅读详情
package algorithm;
/* 本例子是:求出迷宫的最短路径
 * 如果是找一点出路而不管远近,则可以用队列来处理,类似二叉树的宽度遍历。
 * 在迷宫问题上,类似在一颗4叉树中,利用遍历去找一条从根到某个节点的路径一样。
 * 方法为:
 * 处理下面的节点,
 * 1:从队列中取出最前面的节点,记为K,直到队列里面没有节点为止。
 * 2:对它的北节点,南节点,西节点,东节点,记为节点M,逐一按下面处理。
 * 2.1:如果M节点未处理,且不是起始点,则设置M节点的路径长度为 K节点的长度+1,把节点M入队列,设置节点M的preNode为K。
 * 2.2:如果M节点被处理过,但是它的长度大于(K节点的长度+1),则设置M节点的路径长度为K节点的长度+1,把节点M入队列,设置节点M 的preNode为K。
 * 2.3:如果是其它情况,都不处理。
 * 3.如果出口节点的长度不为-1,则从出口节点的preNode开始,逐一打印出节点,这些节点就是最短路径上的节点。
 */
import java.util.*;
public class MazeShow {
     public static class MazeNode {
	/* 0 means it is not processed yet or it is entrance point
	 * >0 means the shortest distance from the entrance node  
	 */
	private int distance; 
	/*
	 * data: it is setup during initialization phase.
	 * -1: means this node is wall.
	 * 0: means it can be went through.
	 */
	private int data;
	private int row;
	private int column;
	boolean isStartPoint;
	boolean isExitPoint;
	private MazeNode prevNode;
	
	public MazeNode(){
		distance=0;
		data=0;
		column=0;
		row=0;
		isStartPoint=false;
		isExitPoint=false;
		prevNode=null;
	}
	
	public MazeNode getprevNode(){
		return prevNode;
	}
	public void setprevNode(MazeNode mprevNode){
		prevNode=mprevNode;
	}	
	public int getRow(){
		return row;
	}
	public int getColumn(){
		return column;
	}
	public void setRow(int row){
		this.row=row;
	}
	public void setColumn(int column){
		this.column=column;
	}
	public int getDistance(){
		return distance;
	}
	public void setData(int data){
		this.data=data;
	}	
	public void setDistance(int dis){
		distance=dis;
	}
	public int getData(){
		return data;
	}	
	public void setStartPoint(boolean value){
		isStartPoint=value;
	}
	public void setEndPoint(boolean value){
		isExitPoint=value;
	}
	public boolean getStartPoint(){
		return isStartPoint;
	}
	public boolean getEndPoint(){
		return isExitPoint;
	}
   }
public static int getMazeShortestDistance(){	
		int MAZE_WIDTH=5,MAZE_HEIGHT=5,distance=0;		
	    MazeShow.MazeNode[][] mymaze=new MazeShow.MazeNode[MAZE_HEIGHT][MAZE_WIDTH];
	    for(int height=0;height<MAZE_HEIGHT;height++)
	      for(int width=0;width<MAZE_WIDTH;width++) {
	    	  //Java OBJ array must create new each obj element after TYPE[][] m=new TYPE[5]6];
	    	  mymaze[height][width]=new MazeShow.MazeNode();
	    	  mymaze[height][width].setRow(height);
	    	  mymaze[height][width].setColumn(width);
	    	  mymaze[height][width].setprevNode(null);
	      }
	    
	    //set up as(0,0) as entrance point 	    
	    mymaze[0][0].setData(0);
	    mymaze[0][0].setDistance(0);
	    mymaze[0][0].setStartPoint(true);
//set up as(MAZE_WIDTH-1,MAZE_HEIGHT-1) as exit point 
	    mymaze[MAZE_HEIGHT-1][MAZE_WIDTH-1].setData(0);
	    mymaze[MAZE_HEIGHT-1][MAZE_WIDTH-1].setDistance(0);
	    //set maze as below which is wall
	    /*
	     *   
       { 0,  0,  0,  0,  0},    
       {-1,  0, -1,  0, -1},    
       { 0,  0, -1, -1, -1},    
       { 0, -1,  0,  0,  0},    
       { 0,  0,  0, -1,  0},
	     * 
	     */
 mymaze[1][0].setData(-1);	    
	    mymaze[3][1].setData(-1);	    
	    mymaze[1][2].setData(-1);
	    mymaze[2][2].setData(-1);	    
	    mymaze[2][3].setData(-1);
	    mymaze[4][3].setData(-1);	    
	    mymaze[1][4].setData(-1);
	    mymaze[2][4].setData(-1);	    
	    //process now
	    Queue<MazeShow.MazeNode> mazequeue = new LinkedList<MazeShow.MazeNode>();	    
	    //push the entrance point as start point	    
	    mazequeue.offer(mymaze[0][0]);
	    MazeShow.MazeNode pnode=null;	    
	    int pcolumn=0, prow=0;
		MazeShow.MazeNode currentNode=null;
		/*
		 * 1、add()和offer()区别:
          add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false。因此就可以在程序中进行有效的判断!
		  2、poll()和remove()区别:
remove() 和 poll() 方法都是从队列中删除第一个元素。如果队列元素为空,调用remove() 的行为与 Collection 接口的版本相似会抛出异常,但是新的 poll() 方法在用空集合调用时只是返回 null。因此新的方法更适合容易出现异常条件的情况。
		 * *
		 */
	    while(!mazequeue.isEmpty()) {
	    	//get the FIFO node from queue;
	    	currentNode=null;
	    	pnode=mazequeue.poll();	    	
	    	/*依次把上 下 左 右 四个相邻的节点的距离更新后,然后把这些节点送进队列里,处理这4个方向节点完毕后,
	    	 * 再从队列头取一个节点,再次重上上面的处理,直到处理到完所有能从起点开始的节点。
	    	 * */
	    	for(int turn=0;turn<4;turn++) {
	    	 switch(turn) {
	    	  case 0: //left
	    		  if(pnode.getColumn()>0) {
	    			 pcolumn=pnode.getColumn()-1;
	 	    		 prow=pnode.getRow();
	 	    		 currentNode=mymaze[prow][pcolumn];
	    		   }
	    		  else 
	    			  currentNode=null;  
	    		    break;
	    	 case 1: //down	    		 
	 	    	  if(pnode.getRow()<(MAZE_HEIGHT-1)) {
	 	    		// not the lowest node
	 	    		pcolumn=pnode.getColumn();
		 	    	prow=pnode.getRow()+1;
		 	    	currentNode=mymaze[prow][pcolumn];
	 	    	  }
	 	    	  else 
	    			  currentNode=null;  
	    		    break;
	    	 case 2: //right 
	 	    	 if(pnode.getColumn()<(MAZE_WIDTH-1)) {
	 	    		// not the most right node
	 	    		 pcolumn=pnode.getColumn()+1;
	 	    		 prow=pnode.getRow();
	 	    		 currentNode=mymaze[prow][pcolumn];
	 	    	  }
	 	    	 else 
	    			  currentNode=null;  
	    		   break;
	    	 case 3: //up
	 	    	  if(pnode.getRow()>0) {
	 	    		 pcolumn=pnode.getColumn();
	 	    		 prow=pnode.getRow()-1;
	 	    		 currentNode=mymaze[prow][pcolumn];
	 	    	  } else
	 	    		 currentNode=null;  
	    		    break;
	    		    
	    	 default:
	    		   System.out.println("error, shall not reach here");
	    		   return -1;
	    	 }
	    	 if(currentNode==null)
	    		 continue;
	    	 //skip the wall node
	    	  if(currentNode.getData()== -1)
	    		 continue;	    	
	    	  distance=currentNode.getDistance();
	    	  if(distance==0 && (!currentNode.getStartPoint())){
	    	//this is node not processed yet and it is not startpoint
	    		   currentNode.setDistance(pnode.getDistance()+1);
	    		   mazequeue.offer(currentNode);
	    	//set currentNode.preNode as pnode.
	    		   currentNode.setprevNode(pnode);
	    	  } 
	    	  else { if(distance>(pnode.getDistance()+1)){
	    				  //update to make it shorter
	    			 currentNode.setDistance(pnode.getDistance()+1);
	  	    		 mazequeue.offer(currentNode);
	  	    		currentNode.setprevNode(pnode);
	    		     } 
	    	        else { //if distance <= (pnode.getDistance()+1
	    		    	    //nothing to do	    		    	 
	    		     }	    			  
	    		  }	    			  
	    		}
	    	}
	    System.out.println("the shortest path is: "+mymaze[MAZE_HEIGHT-1][MAZE_WIDTH-1].getDistance());
	    if(mymaze[MAZE_HEIGHT-1][MAZE_WIDTH-1].getDistance() >0 ) {
	        //print out the shortest path from the start point.
	    	MazeNode node=mymaze[MAZE_HEIGHT-1][MAZE_WIDTH-1].getprevNode();
	    	Stack<MazeNode> stack=new Stack<>();
	    	stack.push(mymaze[MAZE_HEIGHT-1][MAZE_WIDTH-1]);
	    	if(node != null) {
	    		stack.push(node);	    		
	    		node=node.getprevNode();
	    	}	    	
	    	while(node != null) {
	    		stack.push(node);
	    		node=node.getprevNode();
	    	}
	    	node=stack.pop();
	    	if(null != node)
	    		System.out.print("("+node.getRow()+","+node.getColumn()+")");
	    	while(!stack.isEmpty()) {
	    		node=stack.pop();
	    		System.out.print("->("+node.getRow()+","+node.getColumn()+")");	
	    	}
	    	
	    }
		return (distance= mymaze[MAZE_HEIGHT-1][MAZE_WIDTH-1].getDistance());
	}
}

输出结果是:

the shortest path is: 12
(0,0)->(0,1)->(1,1)->(2,1)->(2,0)->(3,0)->(4,0)->(4,1)->(4,2)->(3,2)->(3,3)->(3,4)->(4,4)

迷宫问题,求最短路径长度、最短路径条数、所有最短路径,DFS+BFS+栈+队列 阅读详情

相关推荐

详解图的最短路径算法(BFS、Dijkstra、Floyd)(附上图解步骤)

详解图的最短路算法、针对BFS、Dijkstra、Floyd算法写出详细的图解、解题步骤

叶小树咯 8105

C++控制台迷宫游戏:DFS生成与BFS寻路算法实践

深度优先搜索(DFS)和广度优先搜索(BFS)是图论与算法中的基础概念,广泛应用于路径规划、迷宫生成等场景。DFS通过递归或栈实现深度探索,常用于生成复杂结构;BFS借助队列进行层序遍历,能确保找到最短路径。在游戏开发与算法教学中,这两种算法常被用于构建可交互的迷宫系统,既能巩固数据结构知识,又能直观展示算法原理。本文以C++控制台迷宫游戏为例,详细解析如何利用DFS算法生成随机迷宫,并结合BFS实现自动寻路功能,为初学者提供从理论到实践的完整学习路径。

weixin_30732487的博客 292

Diffusion、VAE与GAN:三大生成模型的原理对比与应用场景解析

本文深入解析了Diffusion、VAE与GAN三大生成模型的核心原理与特性。Diffusion模型通过逆向去噪过程实现高质量图像生成,但计算成本较高;VAE擅长学习概率潜空间,训练稳定但图像偏模糊;GAN通过对抗训练生成锐利图像,但存在模式崩溃风险。文章结合实战场景,为图像生成、修复、超分辨率等任务提供了清晰的模型选择指南。

weixin_29063979的博客 342

BFS 走迷宫问题、迷宫最短路(最短步数并打印出来)

走迷宫问题 给定一个nm大小的迷宫,其中代表不可通过的墙壁,而.代表平地,S代表起点,T代表终点。 移动过程中,如果当前位置是(x,y)(下标从0开始),且每次只能前往上下左右四个位置的平地。 求从起点S到达终点T的最少步数。 输入 5 5 … ... .s. .**. …t 2 2 4 3 输出 11 void bfs() { queue<int> q;//一般用stl库中的queue来实现队列比较方便 q.push(起点S);//将初始状态入队 标记初始状态已入队。 while(!q

bantianTU的博客 1462

TSMC40nmLP版图实战:从Design Rule解读到Cadence高效布局布线

本文详细解析了TSMC40nmLP工艺的版图设计实战,从Design Rule解读到Cadence高效布局布线技巧。重点介绍了40nm工艺中的关键设计规则,如最小线宽、间距规则和深N阱规则,并分享了Cadence Virtuoso中的高效工作流和射频模块设计技巧,帮助工程师提升版图设计效率和质量。

weixin_29250403的博客 378

RK3576+IMX415 MIPI摄像头零拷贝显示系统

MIPI CSI-2是嵌入式视觉系统中主流的高速图像传感器接口标准,其核心价值在于低延迟、高带宽与硬件级DMA直通能力。基于V4L2子系统与DRM/KMS驱动栈,可构建从传感器RAW数据到帧缓冲区的零拷贝通路,显著降低CPU负载并提升实时性。该技术广泛应用于工业检测、边缘AI推理前数据接入及多路同步采集等场景。本文以Rockchip RK3576 SoC和索尼IMX415传感器为典型组合,详解MIPI物理层适配、内核驱动集成、GStreamer零拷贝管道搭建及systemd服务化部署,覆盖从硬件信号完整性到

weixin_36047538的博客 216

BFS解迷宫问题,并打印最短路径

第一行两个整数n, m,为迷宫的长宽。   接下来n行,每行m个数,数之间没有间隔,为0或1中的一个。0表示这个格子可以通过,1表示不可以。假设你现在已经在迷宫坐标(1,1)的地方,即左上角,迷宫的出口在(n,m)。每次移动时只能向上下左右4个方向移动到另外一个可以通过的格子里,每次移动算一步。数据保证(1,1),(n,m)可以通过。 输出格式   第一行一个数为需要的最少步数K。

CESC的博客 3407

高效敏感词检测API平台对比与选型指南

本文为开发者提供了高效敏感词检测API平台的选型指南。文章对比了专业API平台、头部云厂商、新兴AI服务商及开源方案,从检测能力、集成易用性、成本、稳定性及扩展性五大维度进行分析,并给出实战选型建议,帮助团队根据业务场景快速选择最合适的敏感词检测服务。

weixin_29325955的博客 347

POJ - 3984 迷宫问题(bfs打印路线)

题目链接: [迷宫问题] 大致题意: 一个5 × 5的二维数组,1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求找出并输出从左上角到右下角的最短路线 解题思路: 最短路线,肯定bfs,定义一个结构体存路线,当前点存上一个点的路线,最后递归输出 AC代码: #include<iostream> #include<queue> #include<algorithm> #include<cstdio> using namespace std;

qq_49494204的博客 207

iphone查看/private/var/mobile/Containers/Data/Application/文件

xcode查看iPhone的private/var/文件夹xcode连接iPhone真机选择app下载Containers文件夹到mac电脑中查看手机中下载的文件 使用xcode真机调试的时候,文件目录都是这种/private/var/mobile/Containers/Data/Application/FAEFDF4D-5CE4-474F-9C53-C19789DB59F6/tmp/ xcode连接iPhone真机 不需要越狱,使用xcode上连接iPhone,然后选择运行的app,选择window-&g

小手琴师的博客 101万+

ESD防护设计宝典(十一):CE(传导发射)超标问题排查与解决

(Conducted Emission, CE),亦称为传导骚扰,是电子电气设备或系统内部的电压、电流通过信号线、电源线或地线向外传输,对其他电子电气设备或系统造成电磁干扰的物理现象。其。

m0_56451176的博客 856

简单二维迷宫bfs最短路径输出

给定一个 n × m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1 ,其中 0 表示可以走的路,1 表示不可通过的墙壁。 最初,有一个人位于左上角 (1, 1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。 请问,该人从左上角移动至右下角 ( n, m ) 处,至少需要移动多少次。 数据保证 (1, 1) 处和 ( n, m ) 处的数字为 0 ,且一定至少存在一条通路。 Input 第一行包含两个整数 n 和 m 。1 ≤ n, m ≤ 100 接下来 n 行,

测试 1511

QT开发串口程序与单片机通讯

如果有对象对这个信号感兴趣,想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。的内容,虽然实现的功能很简单,但是QT上位机开发的步骤基本就是这些步骤,通过这个基础实例把这些套路摸透我们就可以接着进行后续更多QT程序地开发学习了。QWidget类:所有用户界面对象的基类,窗口部件是用户界面的一个基本单元,它从窗口系统接收鼠标,键盘和其他消息,并在屏幕上绘制自己。我们上面运行的上位机都是在Qt Creator中编译运行的,如果我们需要把编写好的可执行文件发送给别人使用的话还需要进行打包。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 945

广度优先搜索(BFS)最短路径输出表示(三种方法)

相信我,看完之后,你会对BFS有种全新的了解,彻底掌握BFS 只需要这一篇就足够啦,狗头 BFS路径表示 广度优先搜索顾名思义就是以迷宫里的无向图某一个点,借助队列,一层一层以该点为中心散开进行搜索,简单的BFS只能显示出最短路径的长度,这里探讨的就是如何实现BFS对最短路径的输出 简单的BFS 通过队列来实现,找到迷宫的起点(S)入队,出队列里面的队首,把队首上下左右相邻的点入队列,一直重复此操...

weixin_44965308的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

DFS算法实战:C++实现迷宫最短路径搜索与回溯优化

深度优先搜索(DFS)是图论和算法学习中的基础搜索策略,其核心原理是通过递归或栈实现“一路到底”的深度探索。在解决迷宫、路径规划等问题时,DFS能遍历所有可能解,但标准实现无法保证找到最短路径。通过引入路径记录、状态回溯和剪枝优化,可以改造DFS以支持最短路径搜索,这有助于深入理解递归、回溯和算法复杂度。在工程实践中,虽然广度优先搜索(BFS)在无权图最短路径问题上更高效,但DFS的改造练习对于掌握算法思想、应对加权图或复杂约束场景(如A*、Dijkstra)有重要价值。本文以迷宫最短路径为例,详细解析DF

weixin_34262482的博客 385

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

迷宫问题——bfs(输出最短路径)

定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 Input 一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。 Output 左上角到右下角的最短路径,格式如样例所示。 Sample Input 0 1 0 0

mashizuren的博客 6110

迷宫-广度优先搜索-最短路径并打印该条最短路径

迷宫类的广度优先搜索与树的层次遍历类似但是又有不同,比如树的层次遍历不需要判重即不需要标记,树也不基本需要判断是否可以入列(即下一节点是否合法);而图需要标记进行判重,并且入列时还需要考虑状态是否合法,合法才入列。 目录 1.本文例子的迷宫如下: 2.帮助理解代码: 3.BFS的一般步骤 4.本文的队列结构 5.广度优先搜索核心 6.所有代码 7.结果 1.本文例子的迷宫如下: ...

qq_34645863的博客 1649

c语言打印输出迷宫地图所有路径

在 C 语言中打印出迷宫的所有路径可以使用深度优先搜索(DFS)算法。您可以在迷宫数组中从起点开始搜索,并在每个经过的点标记为已走过,以防止重复经过。当到达终点时,打印出找到的路径。如果继续搜索下去不能找到终点,那么回溯并撤销标记,换一种路径继续搜索。 每次找到一个新路径就记录到一个二维数组中,最后遍历输出整个二维数组就能得到所有路径。 在路径记录的同时需要记录路径长度、起点、终点和每一步走的方向...

weixin_42612804的博客 792

迷宫问题(bfs)

给定一个 n×nn×n 的二维数组,如下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 数据保证至少存在一条从左上角走到右下角的路径。 输入格式 第一行包含整数 n。 接下来 nn 行,每行包含 nn 个整数 0 或 1,表示迷宫

qq_43738331的博客 1318

BFS_迷宫问题输出最短路径(在原地图中输出路径)

【代码】BFS_迷宫问题输出最短路径(在原地图中输出路径)

qq_52463974的博客 888

python实现BFS算法(广度优先搜索)输出最短路径

看到网上很多代码,使用BFS算法仅实现从起点能否到达终点的问题,却不输出从起点到终点的最短路径。我决定实现它! 实现的原理:在传统BFS算法的基础上,多维护一个表,用来记录每个点的父节点是谁,然后在找到终点后,根据父节点表,来倒推路径。 路径图如下: 这个是网上的从双子峰(图中a点)到金门大桥(图中g点)的路。 实现代码如下: from collections import deque # maps表用来记录各个节点的子节点 maps = dict() maps['a'] = ['b', 'c'] map

inside802的博客 7425

bfs求最短路并打印出路径

义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 Input 一...

weixin_30426879的博客 248

小白学BFS:迷宫最短路径

小白慢悠悠写一天的BFS寻找最短路径条数的问题

qq_56089122的博客 1573

BFS最短路打印路径

最短路+路径打印

阿正的梦工坊 536

BFS找最短路径

if (maze[nxt.x][nxt.y] == '.') {//不是墙壁,修改迷宫标记为走过的总长度。通过队列进行实现,起点入队,搜索四周,可行路径全部入队,起点出队,依次递归,即可实现搜索。每组数据第一行包含两个数n=100,m

lyhizjj的博客 545
上一篇: 一个数组循环右移K位, java版本
下一篇: 经典算法题:数字三角形寻找最大路径
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值