杭电OJ 1035(C++)

本文深入探讨了迷宫寻路的基本算法,通过构建二维数组模拟地图和路径追踪,实现对迷宫路径的有效探索。文章详细解释了如何利用步数(step)和循环次数(loop)来判断机器人是否成功找到出口或陷入无限循环。
部署运行你感兴趣的模型镜像

本题比较基础,首先建立两个二维数组,一个保存地图,一个保存地图上某点已经走过的次数。

如果第一次走过某点,则增加step;
如果第二次走过某点,则增加loop,减少step;
如果第三次走过某点,则结束。

#include <iostream>
using namespace std;
const int MAX = 1000;
char arr[MAX][MAX]; //地图数组
int track[MAX][MAX]; //路径数组,保存地图上某点已经走过的次数

int main()
{
	int row, column, num;
	while (cin >> row >> column >> num)
	{
		if (row == 0 && column == 0)
			break;

		for (int i = 1; i <= row; i++)
		{
			for (int j = 1; j <= column; j++)
				cin >> arr[i][j];
		}
		memset(track, 0, sizeof(track)); //初始化路径数组

		char ins;
		int step = 0, loop = 0;
		int i = 1, j = num;
		while (i > 0 && i <= row && j > 0 && j <= column)
		{
			if (track[i][j] == 2) //如果某点已经路过2次,则已经重复走了一圈,结束循环
				break;
			if (track[i][j] == 1) //如果某点已经路过1次,则开始第一圈循环
			{
				track[i][j] = 2;
				++loop;
				--step;
				ins = arr[i][j];
				switch (ins)
				{
				case 'N':
					i -= 1;
					break;
				case 'W':
					j -= 1;
					break;
				case 'S':
					i += 1;
					break;
				case 'E':
					j += 1;
					break;
				}
			}
			else //第一次经过某点
			{
				++step;
				track[i][j] = 1;
				ins = arr[i][j];
				switch (ins)
				{
				case 'N':
					i -= 1;
					break;
				case 'W':
					j -= 1;
					break;
				case 'S':
					i += 1;
					break;
				case 'E':
					j += 1;
					break;
				}
			}
		}
		if (loop == 0)
			cout << step << " step(s) to exit" << endl;
		else
			cout << step << " step(s) before a loop of " << loop << " step(s)" << endl;
	}
	
	return 0;
}

继续加油。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值