c语言编程机器人爬山问题,编程题——机器人走迷宫 (用C语言)

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

KFC赵典

2013.12.02

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:56%    等级:9

已帮助:220人

/*迷宫由 N W S E 组成 踩到N向上走一格 踩到W 向左走一格 踩到S向下走一格 踩到E 向右走一格 输入迷宫行数 列数 不大于10 机器人初始列数(注意 这个列数是从1开始数的) 判断能否走出迷宫。能走出输出步数 多组输入 遇 0 0 0 结束输入 例 输入 4 6 5 NNNNSN NNNSWN NNSWNN NSWNNN 3 5 2 NSNNNN NSWNNN NENNNN 0 0 0 输出 7 no */ /*分析:程序输入 n m c 即行 列 机器人位置:passed[ii][jj](ii = 1;jj = c;)采取net[11][11]记录输入的方向,passed[11][11]记录机器人走过的路,先初始化为0,走过改为1, 初始步子count = 1;成功flag = 0用作while条件;while循环用模拟走路的方法, 1. 1 == passed[ii][jj],机器人位置 ii jj走过, flag = 1; 2. 如果'N' == net[ii][jj]向上走一格,1 == ii则走出了,否则passed[ii][jj] = 1;//改变记录数组 1表示走过 ii = ii - 1; //向上走一格,count ++; //步子加一 3. 如果'S' == net[ii][jj]向下走一格,n == ii则走出了,否则passed[ii][jj] = 1;//改变记录数组 1表示走过 ii = ii + 1; //向上走一格,count ++; //步子加一 4.如果'W' == net[ii][jj]向左走一格,1 == jj则走出了,否则passed[ii][jj] = 1;//改变记录数组 1表示走过 jj = jj - 1; //向上走一格,count ++; //步子加一 5.如果'E' == net[ii][jj]向右走一格,m == jj则走出了,否则passed[ii][jj] = 1;//改变记录数组 1表示走过 jj = jj+1; //向上走一格,count ++; //步子加一 以上已遍历完毕,判断if(1 == flag)//记录数组中都是一 ,都走完了,没法走出 从新输入图scanf("%d %d %d",&n,&m,&c); */ #include int main() { char net[11][11]; //记录方向 int passed[11][11]; //passed[i][j] = 1表示该点已走过 int n,m,c; //n行m列的迷宫 机器人从c列开始走 int i,j,ii,jj,flag; int count; scanf("%d %d %d",&n,&m,&c); while(0 != n && 0 != m && 0 != c) { count = 1; flag = 0; for(i=1;i<=n;++i)//输入 scanf("%s",&net[i][1]); for(i=1;i<=n;++i)//记录走过的二维数组初始化0表示未走过 for(j=1;j<=m;++j) passed[i][j] = 0; ii = 1; jj = c; while(1)//一直循环 加break做退出循环条件 { if(1 == passed[ii][jj])//机器人位置 ii jj走过 { flag = 1; break; } if('N' == net[ii][jj]) { if(1 == ii) //已到达最上端还要往上走, { printf("%d\n",count); break; } else { passed[ii][jj] = 1;//改变记录数组 1表示走过 ii = ii - 1; //向上走一格 count ++; //步子加一 } }//end if('N' == net[ii][jj]) else if('S' == net[ii][jj]) { if(n == ii) //已到达最下端还要往下走, { printf("%d\n",count); break; } else { passed[ii][jj] = 1; ii = ii + 1; count ++; } }//end else if('S' == net[ii][jj]) else if('W' == net[ii][jj]) { if(1 == jj) //已到达最左端还要往左走, { printf("%d\n",count); break; } else { passed[ii][jj] = 1; jj = jj - 1; count ++; } }//end else if('W' == net[ii][jj]) else if('E' == net[ii][jj]) { if(m == jj) //已到达最右端还要往右走, { printf("%d\n",count); break; } else { passed[ii][jj] = 1; jj = jj + 1; count ++; } }//end else if('E' == net[ii][jj]) }//end while(true) if(1 == flag)//记录数组中都是一 ,都走完了 printf("no\n"); scanf("%d %d %d",&n,&m,&c);//寻找失败 从新输入 }//end while return 0; }

00分享举报

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值