您的位置:首页 > 其它

POJ 1573 Robot Motion 模拟

2011-09-09 16:58 501 查看
题意:给定一个矩阵,里面有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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c