《算法设计与分析第二版》100行 C语言实现 广度度优先算法 BFS——最短距离

news2024/11/18 15:40:06

 抄录自课本P157页。

#include <stdio.h>
#define MAXQ 100										// 队列大小 
#define MAxN 10											// 最大迷宫大小 

int n=8;												// 迷宫大小
char Maze [MAxN][MAxN]=
{
	{'O','X','X','X','X','X','X','X',},
	{'O','O','O','X','O','X','O','X',},
	{'X','X','O','O','O','X','O','X',},
	{'X','X','O','X','O','X','X','X',},
	{'X','X','O','X','O','X','O','X',},
	{'X','X','O','X','O','X','O','X',},
	{'X','X','O','O','O','O','O','X',},
	{'X','X','O','X','O','X','O','O',},
};
int H[4]= {0,1,0,-1};									// 水平偏移量,下标对应方位号 0~4
int V[4]= {-1,0,1,0};									// 垂直偏移量
struct Position
{
	int x,y;											// 当前方块位置
	int pre;											// 前驱方块的下标
};
Position qu[MAXQ];										// 一个队列
int front =-1,rear=-1;									// 队头,队尾
void dispath(int front)
{
	int i,j;
	for(i=0; i<n; i++)
		for(j=0; j<n; j++)
			if(Maze[i][j]=='*')
				Maze[i][j]=='O';

	int k= front;
	while(k!=-1)
	{
		Maze[qu[k].x][qu[k].y]=' ';
		k=qu[k].pre;
	}
	for(i=0; i<n; i++)
	{
		printf(" ");
		for(int j=0; j<n; j++)
			printf("%c",Maze[i][j]);
		printf("\n");
	}
}
void BFS(int x,int y)
{
	Position p,p1,p2;
	p.x=x;
	p.y=y;
	p.pre=-1;											// 入口节点
	Maze[p.x][p.y]='*';									// 改为'*' 避免重复查找
	rear++;
	qu[rear]=p;											// 入口方块入队
	while(front!=rear) 									// 队列不空时循环
	{
		front++;
		p1=qu[front];									// 出队方块
		if(p1.x==n-1&&p1.y==n-1)						// 找到出口 
		{
			dispath(front);								// 输出路径 
			return;
		}

		for(int k=0; k<4; k++)
		{
			p2.x=p1.x+V[k];								// 找到 p1 的相邻方块
			p2.y=p1.y+H[k];
			if(p2.x>=0&&p2.y>=0&&p2.x<n&&p2.y<n&&Maze[p2.x][p2.y]=='O')		// 方块 2 没有越界并且可走 
			{
				Maze[p2.x][p2.y]='*';					// 改为‘*’避免重复查找
				p2.pre=front;
				rear++;
				qu[rear]=p2;							// 方块 2 进队
			}
		}
	}
}

int main()
{
	int x=0,y=0;										// 指定入口,出口默认为 (n-1,n-1) 
	printf("一条迷宫路径:\n");
	BFS(x,y);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1525836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

普通人搞副业,空闲时间做,月入5w+

我是电商珠珠 大家会发现&#xff0c;朱砂越来越火&#xff0c;不仅是因为它好看&#xff0c;而且商家对外扬言可以招财。现在的人对爱情不屑一顾&#xff0c;财神殿里可以长跪不起&#xff0c;人人都想求财&#xff0c;想要在空余时间搞副业赚大钱&#xff0c;但做什么还没有…

掌握 Swagger annotations(注解):完全指南与最佳实践

利用 Swagger 注解增强 API 理解 Swagger 提供的注解集是其框架中定义 API 规范和文档的重要工具。这些注解在代码里标注重要部分&#xff0c;为 Swagger 的解析工作铺路&#xff0c;进而生成详尽的 API 文档。开发者编写的注释能够被转换成直观的文档&#xff0c;并展现API端…

【呼市经开区建设服务项目水、电能耗监测 数采案例】

一、项目背景及需求 项目地点位于内蒙古呼和浩特市&#xff0c;呼市数字经开区建设服务项目。属于企业用能数据采集、能耗监测板块子项目。 针对水、电能耗数据采集&#xff0c;结合现场客观因素制约&#xff0c;数据采集方面存在较大难度。大多数国网电表485接口由于封签限制&…

B009-springcloud alibaba 服务配置 Nacos Config

目录 服务配置中心介绍Nacos Config入门Nacos Config深入配置动态刷新方式一: 硬编码方式方式二: 注解方式(推荐) 配置共享同一个微服务的不同环境之间共享配置不同微服务中间共享配置 nacos的几个概念 服务配置中心介绍 首先我们来看一下,微服务架构下关于配置文件的一些问题…

031—pandas 读取解析实验室数据至DataFrame

前言 某个科研实验室在进行一项物理实现&#xff0c;实验仪器会输出一个 txt 文本的数据&#xff0c;研究人员需要从这个文本中将数据结构化才能进行进行统计分析。 在为个解析和分析过程中&#xff0c;他们选择了 Python 的 pandas 库来完成这些操作。我们今天来完成这这个 t…

一口气看完明朝276年历史

明朝是中国历史上最后一个由汉人建立的大一统封建王朝&#xff0c;建立于公元1368年&#xff0c;亡于公元1644年&#xff0c;国祚276年&#xff0c;传12世16帝。 太祖建国 太祖&#xff08;1368~1398&#xff09; 公元1368年&#xff0c;朱元璋在南京应天府建元称帝&#xff…

Linux 中搭建 主从dns域名解析服务器

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; ————前言———— 主从&#xff08;Master-Slave&#xff09;DNS架构是一种用于提高DNS系统可靠性和性能的配置方式。…

兼顾稳定和性价比的跨国企业SD-WAN组网

随着全球业务不断扩张&#xff0c;跨国企业面临着跨域网络的复杂性和不稳定性带来的挑战。不同地区分支机构的数据互通和协作常常受到制约&#xff0c;而在网络问题出现后&#xff0c;排查多方问题导致高昂的部署和运维成本。尽管直连方案在表面上看似省钱&#xff0c;但由于不…

爱恩斯坦棋小游戏使用C语言+ege/easyx实现

目录 1、游戏介绍和规则 2、需要用到的头文件 3、这里我也配上一个ege和easyx的下载链接吧&#xff0c;应该下一个就可以 4、运行结果部分展示 5、需要用到的图片要放在代码同一文件夹下 6、代码地址&#xff08;里面有需要用到的图片&#xff09; 1、游戏介绍和规则 规则如…

few shot vid2vid(Few-shot Video-to-Video Synthesis)论文理解

代码&#xff1a;https://github.com/NVlabs/few-shot-vid2vid 论文&#xff1a;https://arxiv.org/abs/1910.12713

centos虚拟机设置静态IP地址

vim编辑文件 /etc/sysconfig/network-scripts/ifcfg-ens33 重启即可。

kkFileView漏洞总结

0x01 kkFileview存在任意文件读取漏洞 漏洞描述 Keking KkFileview是中国凯京科技&#xff08;Keking&#xff09;公司的一个 Spring-Boot 打造文件文档在线预览项目。Keking kkFileview 存在安全漏洞&#xff0c;该漏洞源于存在通过目录遍历漏洞读取任意文件&#xff0c;可能…

TCP:三次握手四次挥手及相关问题:

连接—三次握手&#xff1a; 流程图&#xff1a; 过程详解&#xff1a; 客户端(connect)连接服务器&#xff08;listen) Client将标志位SYN置为1,随机产生一个值seqx, 并将该数据包发送给Server, Client进入SYN_ SENT状态&#xff0c;等待Server确认。Server收到数据包后由标…

提权,提个damn

阅读须知&#xff1a; 探索者安全团队技术文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作,由于传播、利用本公众号所提供的技术和信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者 本人负责&#xff0c;作者不为此承担任何责任,如…

2024蓝桥杯每日一题(递归)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;有序分数 试题二&#xff1a;正则问题 试题三&#xff1a;带分数 试题四&#xff1a;约数之和 试题五&#xff1a;分形之城 试题一&#xff1a;有序分数 【题目描述】 【输入格…

【sequence进阶 config_db message_2024.03.14】

sequence进阶 sequence的仲裁 多个sequence发送给一个sequencer的情况&#xff0c;使用的两种方式&#xff1a; class virtual_seqence extends uvm_sequence;virtual task body();sub_sequene seq_0;sub_sequene seq_1;//第一种方式p_sequencer.apb_mst_sqr.set_arbitratio…

计算机一级word 文字处理理论+实操试题

计算机一级word 文字处理理论实操试题 单选题&#xff1a; 1、在Word编辑状态下&#xff0c;要将另一文档的内容全部添加在当前文档的当前光标处&#xff0c;应选择的操作是依次单击______。 A.“文件”选项卡和“打开”项 B.“文件”选项卡和“新建”项 C.“插入”选项卡…

智能硬件 | XR头显市场只有少数玩家,AI是扭转局面的关键?

苹果头显设备Vision Pro突出2项技术&#xff0c;即“空间计算”和手部、眼部跟踪。“空间计算”使设备能够学习并与物理环境进行交互&#xff1b;手部和眼部跟踪功能通过从设备侧面、前置和底部安装的摄像头收集手部和眼球的感应数据&#xff0c;使用户能够操作虚拟环境并与之交…

QT插件简单使用2

目录 1 总的目录结构 2 主程序 3 插件程序 4 运行结果 相比原来的QT插件简单使用-CSDN博客增加了 QObject *create(const QString &name, const QString &spec) override; 函数的使用和Plugin.json的使用 1 总的目录结构 编译器mingw-64 2 主程序 1 新建一个其他…

和解费用3362万美元,谁来守护跨境卖家的“钱包”

公司向原告支付3362万美元(包括原告方主张的损害赔偿金2500万美元及原告方支付的律师费用862万美元)&#xff1b; 公司不得通过任何方式访问或使用原告的产品或数据&#xff1b; 公司不得向最终用户提供维修帮助服务(属于公司汽车诊断产品中的辅助维 修功能&#xff0c;不影响…