杭电OJ 1035(C++)

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

如果第一次走过某点,则增加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;
}

继续加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值