POJ 1573 Robot Motion 模拟

题意:给定一个矩阵,里面有N,S,W,E这4种字母,分别表示向上走,向下走,向左走,向右走4种操作,现给定一个起始点,若能走出矩阵,输出所需移动次数,若最终循环,则输出循环前的移动次数和循环一次的次数

#include <iostream>
using namespace std;
struct
{
	int x,y,step;
} map[13][13];

int main()
{
	char ch;
	int row, col, start, r, c, cnt;
	while ( cin >> row >> col >> start )
	{
		if ( row == 0 && col == 0 && start == 0 ) break;
        r = row; c = start; cnt = 0;
		memset(map,0,sizeof(map));

		for ( int i = row; i >= 1; i-- )
		{
			for ( int j = 1; j <= col; j++ )
			{
				cin >> ch;
				switch ( ch )
				{
				case 'N': { map[i][j].x = 0; map[i][j].y = 1; break; }
				case 'W': { map[i][j].x = -1; map[i][j].y = 0; break; }
				case 'S': { map[i][j].x = 0; map[i][j].y = -1; break; }
                case 'E': { map[i][j].x = 1; map[i][j].y = 0; break; }
				default: break;
				}
			}
		}

		while(1)
		{
			if ( r > row || r == 0 || c > col || c == 0 )
			{
				cout << cnt << " step(s) to exit" << endl;
				break;
			}
			else if (  map[r][c].step != 0 )
			{
				cout << map[r][c].step - 1 << " step(s) before a loop of "
					<< cnt - map[r][c].step + 1 << " step(s)" << endl;
				break;
			}
			else
			{
				cnt++;
				map[r][c].step = cnt;
				int ctemp = map[r][c].x;
				int rtemp = map[r][c].y;
				c += ctemp;
				r += rtemp;
			}  
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值