海龟作图

xqiang66 2003-07-27 03:26:40
假设有只海龟,用一个50*50的二维数组模拟一块由方格组成的

画板,记录海龟爬行路线。海龟的行踪命令从一个数组中读取

,如读到1代表右转弯,读到2代表左转弯,读到36则代表前进6

格,经过的格子则置1,假设每次海龟都从[0][0]开始。请问如

何从左转和右转中找到控制二维数组行列增减的方法?
...全文
388 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2003-07-28
  • 打赏
  • 举报
回复
BlueSky2008() 的方法很简单有效
对问题的抽象比较好,操作和数据都可以归并到一个海龟对象类当中加以解决

海龟类 『
public: // 属性
当前位置
当前方向
public: // 方法
运动()
theoldman 2003-07-28
  • 打赏
  • 举报
回复

看看这样是否对你有帮助?

#include "iostream.h"

const int COL = 50 ;
const int ROW = 50 ;

const bool LEFT = false ;
const bool RIGHT = true ;

int Cur_Col = 0 ; // 当前纵向位置
int Cur_Row = 0 ; // 当前横向位置

bool Row_Or_Col = false ; // 默认纵向
bool Add_Or_Dec = true ; // 必增

bool Turn(bool dir)
{
int col, row ;
bool row_or_col, add_or_dec ;

row_or_col = !Row_Or_Col ;
add_or_dec = (dir==RIGHT?!(Row_Or_Col^Add_Or_Dec):Row_Or_Col^Add_Or_Dec) ;

row = Cur_Row+((row_or_col)?(add_or_dec?1:-1):0) ;
col = Cur_Col+((row_or_col)?0:(add_or_dec?1:-1)) ;

if(row<0 || row>ROW || col<0 || col>COL) return false ;

Row_Or_Col = row_or_col ;
Add_Or_Dec = add_or_dec ;
Cur_Col = col ;
Cur_Row = row ;
return true ;
}

bool GoStraight()
{
int buffer ;
if(Row_Or_Col)
{
buffer = Cur_Row+(Add_Or_Dec?1:-1) ;
if(buffer<0 || buffer>ROW) return false ;
Cur_Row = buffer ;
}
else
{
buffer = Cur_Col+(Add_Or_Dec?1:-1) ;
if(buffer<0 || buffer>COL) return false ;
Cur_Col = buffer ;
}
return true ;
}

void Display(const bool ok)
{
if(!ok) cout << "error!" << endl ;
else
{
cout << Cur_Row << " "<< Cur_Col << " " ;
Row_Or_Col ? cout<<"row" : cout<<"col" ;
cout <<" " ;
Add_Or_Dec ? cout<<"add" : cout<<"dec" ;
cout << endl ;
}
}

void main()
{
cout << "ROW" << " " << "COL" << endl << endl ;
Display(true) ;
Display(GoStraight()) ;

for(int i=0; i<4; i++)
Display(Turn(i%2?RIGHT:LEFT)) ;
Display(Turn(RIGHT)) ;
}
BlueSky2008 2003-07-27
  • 打赏
  • 举报
回复
做一个状态转移表:
当前方向 转向 转后方向:
东:行增 左 北
右 南

南:列增 左 东
右 西

西:行减 左 南
右 北

北:列减 左 西
右 东

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧