编程题——机器人走迷宫 (用C语言)

机器人走迷宫
迷宫由 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

0

1个回答

 /*迷宫由 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 <stdio.h>

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;
}
2
MadaMaD
MadaMaD 感谢
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
走迷宫机器人程序之3--main
#include #include #include #include "common.h" #include "population.h" #define MOVE_UP 0x00 #define MOVE_DOWN 0x40 #define MOVE_LEFT 0x80 #define MOVE_RIGHT 0xC0 void repain(input_data_t ind
C++周末训练题-机器人迷宫(BFS)
机器人迷宫 目录 机器人迷宫 目录 题目描述 格式要求 样例 数据大小 样例说明 错解 正解 题目描述 一个机器人需要巡逻一个m*n的迷宫(m行n列),一个单元格(i,j)表示第i行第j列,机器人每次只能从一个格子移到另一个格子,并只能像(i+1,j),(i-1,j),(i,j+1),或(i,j-1)这样移动到相邻的格子上。 网格中的一些格子中含有障碍物。为...
编程练习:走迷宫问题后续
上一篇文章中提到了走迷宫问题《编程练习:走迷宫问》题 是使用广度优先算法解除出的,最后给出了A*算法,此算法是一种静态路网中求解最短路最有效的算法。最后扯点别的:在人工智能,游戏制作中好像很有用,对于参考文献《A* Pathfinding for Beginners》 中最后讨论的例如游戏设计中避免碰撞,不同地形损耗,路径平滑等,联想到“三国志11”中的操作,感觉醍醐灌顶,有时间参与此类工作要再多研
走迷宫机器人程序之1--无智能随机机器人
common.h#include #include #define MAX_COL_WIDTH 10 // the max width of one column #define DEBUG_MSG 1 typedef struct input_data_tag { unsigned int row_num; unsigned int col_num; unsigned int
机器人走迷宫
机器人走迷宫 Time Limit: 1000ms   Memory limit: 32768K  有疑问?点这里^_^ 题目描述 迷宫对大家来说肯定是很熟悉的东西了,多数人都知道要想走出迷宫,在里面乱猜肯定是不行的,比较好的方法是贴着墙的一侧走,比如只贴着右侧走,最后肯定会走出迷宫,但不能保证要走多久,可能出口尽在咫尺你却错过了。 机器人只听从人的命令或按照预先写
走迷宫的题目
一个迷宫n*m的迷宫格,每格都有一份价值为aija_{ij}的礼物,从左上角开始到右下角(且只能向下和向右),小明可以选择收获路径上的每个单元格的礼物,但必须满足其值比手中所有礼物的价值都要高,也可以选择不拿礼物,一直到迷宫右下角时,小明手中有k份礼物总共有多少种方案。 比如 1 2 2 1 长度为
ACM 迷宫问题 poj3984(c语言)
#include #include #define num 5 int dx[4]={1,0,-1,0}; int dy[4]={0,-1,0,1}; //dx dy用来方便访问该点4个方向上邻接点 int data[5][5]; //迷宫数据 struct node { int x,y,pre; }queue[100]; //队列 int visit[num][num]
用C语言实现走迷宫
走迷宫在很多益智书上面都有,今天我给大家带来C语言做的走迷宫,效果自己试一下,希望大家评论我的博客,其他的东西都有,如果可以做其他游戏请评论,谢谢 #include #include #include #include #define Height 25 //迷宫的高度,必须为奇数 #define Width 25 //迷宫的宽度,必须为奇数 #define Wall 1 #defin
C语言实现简单迷宫 --- 回溯法(递归)
首先我们了解一下回溯法。 回溯法:对于一个包括有很多个节点,每个节点由若干个搜索分支的问题,把原问题分解为若干个子问题求解的算法;当搜索到某个节点发现无法再继续搜索下去时,就让搜索过程回溯(回退)到该节点的前一个结点,继续搜索该节点外的其他尚未搜索的分支;如果发现该节点无法再搜索下去,就让搜索过程回溯到这个节点的前一结点继续这样的搜索过程;这样的搜索过程一直进行到搜索到问题的解或者搜索完了全部可...
迷宫算法,右手法则
package homeWork;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JApplet;imp
基于C语言实现迷宫
说到迷宫,首先一定要有一个迷宫的地图,让后还要规定寻找迷宫出口的一些规则关于迷宫的地图,在这里我创建了一个二维数组来表示迷宫地图,并且约定(1)位置0为墙(即不能走的地方),位置1为路(2)走到边界点的位置,就为出路(3)按照上、右、下、左(顺时针)的顺序来探测下一步出路,若下一步路,就往下走(4)若当前点可以走,就将当前点标记为2,为了区分位置1,防止不知道自己走了重复的路首先先来创建迷宫地图并...
走迷宫机器人程序之2--遗传算法
chromosome.h #define MAX_BITS_PER_GENE 8 typedef struct chromo_tag { unsigned int bits_per_gene; unsigned int gene_num; char * data_p; } chromo_t; int init_chromo( chromo_t *chromo_p, unsigned i
从算法学起C语言--老鼠走迷宫
转载请注明出处,谢谢~ 背景说明: 老鼠走迷宫是递回求解的基本问题,我们在二维阵列中用2表示迷宫墙壁,使用1来表示老鼠走过的路径,求出由入口到出口的路径。 大天朝白话文: 有迷宫挡在了你和妹子/帅哥中间,自己看着办吧。 首先打印个小迷宫看看: 全封闭?No!我们去掉最右边和最底下的一行,只要这个7*7方阵,外边包起来主要是看路径的时候比较清晰。 把左上角的第一个非墙壁点作为起
编程练习:走迷宫问题
问题:  实现给定迷宫,给出你认为最快的走出迷宫步数和策略;若不存在,请输出0。解决思路:  首先根据网上搜索资料,此问题可以看成是树的遍历问题,而典型的树的遍历可分为深度优先遍历和广度优先遍历,不同的遍历方式各有优缺点: 摘录自:[一、深度优先搜索和广度优先搜索的深入讨论)]http://www.cnblogs.com/XBWer/archive/2012/06/20/2556558.html)
C语言简单迷宫问题,深搜,通俗易懂。
简单迷宫深搜-C表示新人,大神勿喷,欢迎给出建议。在网上搜了一些深搜,发现看不懂,就把自己写的贴出来,还是比较好理解。自己出的小迷宫题:给出迷宫,求出共多少方法,和最小最大路程。0表示可走,1表示墙,不可走。*表示入口,#表示出口。以下为代码,因为需要打印出各种路线,所以“+”号表示所走的路#include&amp;lt;stdio.h&amp;gt; char a[50][50]; int n,m,time=0...
经典递归问题--走迷宫--POJ 3984
经典递归问题--走迷宫--POJ 3984
C语言实现迷宫求解问题(详细思路+附源代码)
二、数据结构 1) 建立一个二维数组表示迷宫的路径(0表示通道,1表示墙壁); 2) 创建一个栈,用来存储“当前路径”,即“在搜索过程中某一时刻所在图中某个方块位置”。 1) 创建一个Int类型的二维数组intmaze[n1][n2],用来存放0和1 ; 2) 创建一个结构体用来储存数组信息(数组的横坐标X,数组的纵坐标Y,方向C) typedef struct node
中南大学复试C语言上机题——捡石子
题目描述在一个圆形操场的四周摆放着 n堆石子。 现要将石子有次序地合并成一堆。 规定每次选2 堆石子合并成新的一堆,合并的费用为新的一堆石子数。试设计一个算法,计算出将 n堆石子合并成一堆的最小总费用。 输入输入数据第1行有1个正整数 n(1≤n≤1000),表示有 n堆石子,每次选2堆石子合并。第2行有 n个整数, 分别表示每堆石子的个数(每堆石子的取值范围为[1,1000]) 。 输出数据输出为
c语言迷宫问题求解——递归、栈回溯
第一次写,见谅以下是求迷宫的实现/*第一部分使用递归求解为了数据的简单化,不对路口进行数据结构化,将用一个简单的int类型数组来表示迷宫因为每一个路口的四个方向相对于当前路口的位移都是一样的,这样可以用一个int类型二位数据表示四个方向的相对于当前位置的位移,以顺时针东、南,、西、北储存     *///路口数据结构化//当前路口状态;1表示通顺路口,2表示搜索过的,0表示障碍路口#include...
编程训练[C语言]——从迷宫最短路径了解BFS
迷宫最短路径涉及BFS和队列的使用,本文不用STL实现这道题。 【题目描述】 图片来源于《挑战程序设计竞赛(第2版)》: 【算法分析】 首先将起点存入队列; 每次先从队列中取出一个点,然后遍历其上下左右四个方向上的非墙壁点(当然同时也要判断四个方向都在正确范围内)。对于每一个被遍历的点,先判断其是不是终点,如果不是,则将此点加入队列,然后处理下一个遍历到的点。对于每个被遍历的点,同时还要存储从开...
C语言数据结构用队列求解迷宫最短路径
非常标准,有大量的注释,函数命名规范,易懂。
菜鸟的进击——C语言实现老鼠走迷宫
老鼠走迷宫,一只实验室的小老鼠被用来做迷宫智力实验。科学家在迷宫的一角放上一块奶酪,小老鼠要在最快时间内找到奶酪。老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,...
c语言迷宫最短路径
#include #include #include #define M 8 #define N 7 /////////////////// int Print(); int Findwork(); int S[N][M]={ {1,1,1,1,1,1,1,1}, {1,0,0,0,1,0,0,1}, {1,0,0,1,0,
一个走迷宫的程序
本文给出一个c语言版的走迷宫的程序。迷宫的宽和高,迷宫矩阵,迷宫的入口和出口从文件读入。程序首先读入迷宫数据,然后显示迷宫矩阵,最后调用迷宫搜索程序找到一个路径,并输出。 1. 迷宫的表示。 迷宫用结构体MATRIX来表示 包括迷宫矩阵 迷宫的宽,迷宫的高, 迷宫入口的坐标,迷宫出口的坐标。 结构体定义如下: typedef struct _step { int x;
C语言-老鼠走迷宫(深度寻路算法)
老鼠走迷宫-c语言(基于深度优先的寻路算法) 这个是学校的课设,刚开始有点头疼,但是感觉越做越有意思了,于是就有如下代码,可能相较于大佬还有差距,但是这是我目前所能做的最优的程序了吧!    话不多说,说一下代码的核心内容吧!    迷宫是通过二维数组构造的,二维组中的数字2代表墙体,0是通路,1是老鼠,3代表粮;    以下是所有函数及全局变量: void game()  //走迷宫...
用python开发简易的自动走迷宫脚本
迷宫(Maze)指的是充满复杂通道,很难找到从其内部到达入口或从入口到达中心的道路,道路复杂难辨,人进去不容易出来的建筑物。更多Python视频、源码、资料加群683380553免费获取 假设一个迷宫,它长这样(我自己画的,你也可以通过改变下面的矩阵从而改变迷宫的形状)。 起始点是红色小方块,终点是绿色的小方块,其中蓝色的■代表墙。 我们可以把迷宫抽象成一个矩阵,其中1代表墙...
Python 之 使用Tkinter 做GUI 研究机器人走迷宫
这本是课程的一个作业研究搜索算法,当时研究了一下Tkinter,然后写了个很简单的机器人走迷宫的界面,并且使用了各种搜索算法来进行搜索,如下图: 使用A*寻找最优路径: 由于时间关系,不分析了,我自己贴代码吧。希望对一些也要用Tkinter的人有帮助。from Tkinter import * from random import * import time import numpy as
啊哈C——学习8.1走迷宫
2015年2月8日12:09:27 1.
递归算法求老鼠走迷宫(C语言)
/*说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁, 使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。 解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进, 无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四
51Nod-1344-走格子
ACM模版描述题解逐个处理,当energy小于0时,res就加上-energy,最后直接出结果。一道水题。代码#include <iostream> #include <cstdio>using namespace std;int main(int argc, const char * argv[]) { //freopen("input.txt", "r", stdin); int
纯C语言写的:迷宫游戏
#include #include #include #define N 11 int main() { void maze(int,int);//迷宫图。 FILE *fp; int x=0,y=1,m=0,n=1,i,j; int migong[N][N]; char w,a,s,d,t; if((fp=fopen("E:\\file.txt","r"))==NULL) {
c语言基于堆栈实现回溯法自动走迷宫
迷宫的坐标用二维数组表示,此外还需要一个当前坐标缓冲区,表示当前位置,我使用的是b[3]数组,第三个空间用来表示这个格子被走了几次 #include &quot;stdafx.h&quot; #include&amp;lt;iostream&amp;gt; #include&amp;lt;windows.h&amp;gt; using namespace std; #define MAXSIZE 100 #define ERROR 0 #d...
迷宫问题(C语言实现)
问题描述 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 Input 一个5 ×...
C 迷宫游戏代码实现
###### #0## # ## # #  # # ##   # ###### 请控制小人移动;w.上    s.下    a.左    d.右    q.退出 #include #define COL 6 #define ROW 6 int main(int argc, const char * argv[]){ //定义变量 void printMap(char map[R
深度搜索算法C语言实现--以走迷宫为例
深度搜索算法C语言实现,以走迷宫为例子
华为面试题:迷宫问题 C语言源码
定义一个二维数组N*M(其中2 int maze[5][5] = {         0, 1, 0, 0, 0,         0, 1, 0, 1, 0,         0, 0, 0, 0, 0,         0, 1, 1, 1, 0,         0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走
C语言编写走迷宫游戏
手把手教会如何进行走迷宫游戏制作,此文件可帮助你彻底理解走迷宫游戏编程原理,代码容易理解,通俗易懂,内含大量注释
C语言实现迷宫问题的所有解
迷宫问题所有解:        //迷宫问题解答:                首先需要定义的变量:迷宫M  ,  迷宫的行R=7  ,  迷宫的列C=8  ,  还需要定义一个与迷宫M相同的二维数组t(用来表示迷宫这个格子已经走过了,走过赋值为1)  ,  以及记录方位的二维数组Move[4][2](f方位表示已经在代码中给出注释)  ,  定义一个栈stack[100][2](用来存储路径上...
react学习--左手法则走迷宫
&amp;amp;lt;!DOCTYPE html&amp;amp;gt; &amp;amp;lt;html lang=&amp;quot;en&amp;quot;&amp;amp;gt; &amp;amp;lt;head&amp;amp;gt; &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;amp;gt; &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp
C语言实现迷宫求解
最近做了一个用C语言迷宫求解的题目,来分享一下。 题目要求://迷宫的布局放入到一个二维的数组中 1代表该地方走不通为墙,0代表该地方可以走通,打印出来走的顺序  //0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 const int mizu[10][10] = {      1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1,  //0
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java课程设计走迷宫 零基础学习机器人编程