迷宫编程

原创 2007年09月23日 10:44:00

      读书的时候总听说什么迷宫问题(c版本),当时只是云里雾里。听大家说队列能够解决问题。就也跟着说队列能够解决问题。现在实施起来,还是有点麻烦的。参考了清华大学c习题与解析中的一程序:

 

#include <stdio.h>
#define M 5
#define N 5

struct stype           /**//* 队列用来存储所访问过的点 */
...{
    
int x, y, pre;
}
sq[49];

void printmglj(int rear);    /**//* 函数声明 */

int mg[M+2][M+2=                /**//* 初始化迷宫图形 */
    
...{
        
...{1,1,1,1,1,1,1},
        
...{1,0,0,1,1,1,1},
        
...{1,1,0,0,1,0,1},
        
...{1,0,1,0,0,0,1},
        
...{1,0,1,1,0,1,1},
        
...{1,1,1,1,0,0,1},
        
...{1,1,1,1,1,1,1},
    }
;
int zx[4],zy[4];

void init()            /**//* 打印出迷宫图形 */
...{
    
int i, j;
    
int k = 0;
    
for(i = 0; i <= M+1; i++)
        
for(j = 0; j <= M+1; j++)
        
...{
            k
++;
            printf(
"%3d",mg[i][j]);
            
if(k%7 == 0)
            printf(
" ");
        }

    zx[
0= -1; zx[1= 0; zx[2= 1; zx[3= 0;  /**//* 设立方向(不包括斜四角)*/

    zy[
0= 0; zy[1= 1; zy[2= 0; zy[3= -1;

}


void printmglj(int rear)       /**//* 输出迷宫路径 */
...{
    
int i;
    i 
= rear;
    
do
    
...{
        printf(
"(%d,%d) ",sq[i].x,sq[i].y);
        i 
= sq[i].pre;
    }
while(i != 0);
}


void mglj()
...{
    
int i, j;  /**//*结点坐标*/
    
int x, y;  /**//*存储的结点坐标*/
    
int v;     /**//*移动方向*/
    
int front, rear;  /**//*存储队列*/
    
int find;  /**//*是否找到出路*/

    sq[
1].x = 1;
    sq[
1].y = 1;
    sq[
1].pre =  0;
    find 
= 0;
    front 
= 1; rear = 1; mg[1][1= -1;

    
while((front <= rear) && (!find))
    
...{
        x 
= sq[front].x;
        y 
= sq[front].y;
        
for(v = 0; v <4; v++)
        
...{
            i 
= x+zx[v];
            j 
= y+zy[v];
            
if(mg[i][j] == 0)
            
...{
                rear
++;
                sq[rear].x 
= i;
                sq[rear].y 
= j;
                sq[rear].pre 
= front;
                mg[i][j] 
= -1;
            }

            
if(i == M && j == N)     /**//* 能够正常走出 */
            
...{
                printmglj(rear);
                find 
= 1;
            }

        }

        front
++;
    }

     
if(!find)
        printf(
"不存在路径! ");
}


void main()
...{
    init();
    mglj();
    getch();
}

 经过WIN-TC测试。

上机编程题-迷宫问题

algorithm
  • u010506262
  • u010506262
  • 2015年08月03日 17:09
  • 922

编程练习:走迷宫问题

问题:  实现给定迷宫,给出你认为最快的走出迷宫步数和策略;若不存在,请输出0。解决思路:  首先根据网上搜索资料,此问题可以看成是树的遍历问题,而典型的树的遍历可分为深度优先遍历和广度优先遍历,不同...
  • qiye005
  • qiye005
  • 2016年10月02日 23:07
  • 1349

程序设计--迷宫问题

问题描述:给定一个大小为N*M的迷宫。迷宫有通道和墙壁组成,每一步可以向邻接的上下左右的通道移动。请求出从起点到终点所需要的最小步数。        例如,N为10, M为10,输入的迷宫如下表示,其...
  • smbroe
  • smbroe
  • 2015年01月27日 09:13
  • 2095

【机试题】迷宫寻路--拼多多2018校招内推编程题

链接:https://www.nowcoder.com/questionTerminal/e3fc4f8094964a589735d640424b6a47 来源:牛客网 作者:超蓝の悟空时间限制:...
  • lambsnow
  • lambsnow
  • 2017年08月25日 15:33
  • 305

一个走迷宫的程序

本文给出一个c语言版的走迷宫的程序。迷宫的宽和高,迷宫矩阵,迷宫的入口和出口从文件读入。程序首先读入迷宫数据,然后显示迷宫矩阵,最后调用迷宫搜索程序找到一个路径,并输出。 1. 迷宫的表示。...
  • liangbch
  • liangbch
  • 2012年05月22日 01:02
  • 7596

01迷宫(记忆化搜索)

01迷宫题目描述: 有一个由01组成的n*n格迷宫,若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。那么对于给定的迷宫,询问从...
  • cax1165
  • cax1165
  • 2016年10月06日 21:17
  • 489

走迷宫机器人程序之1--无智能随机机器人

common.h#include #include #define MAX_COL_WIDTH 10 // the max width of one column #define DEBU...
  • xianyuxiaoqiang
  • xianyuxiaoqiang
  • 2015年12月09日 12:03
  • 392

C++抽象编程——回溯算法(1)——迷宫问题

这部分内容其实是递归策略的一部分,但是里面涉及到了一些面向对象的知识,所以我就先总结了面向对象那一部分。这部分内容不得不说还是很有意思的。迷宫问题曾经在希腊神话时代,地中海的克里特岛被一个名叫米诺斯的...
  • redRnt
  • redRnt
  • 2017年05月08日 12:42
  • 1061

走迷宫sdut1269(附带dfs求所有路径与bfs求最佳路径)

记录这道题的原因是这个题的解法是一个很好的模板,特别是用数组表示方向,然后用循环进行操作,节省了不少代码量,比我之前的方法不知道高到哪里去了(噗噗噗),迷宫的问题好多可以在这基础上进行更改,值得记录。...
  • qq_36459536
  • qq_36459536
  • 2017年12月04日 22:21
  • 56

Python 之 使用Tkinter 做GUI 研究机器人走迷宫

这本是课程的一个作业研究搜索算法,当时研究了一下Tkinter,然后写了个很简单的机器人走迷宫的界面,并且使用了各种搜索算法来进行搜索,如下图: 使用A*寻找最优路径: 由于时间关系,不分析了...
  • songrotek
  • songrotek
  • 2015年08月27日 10:09
  • 3246
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:迷宫编程
举报原因:
原因补充:

(最多只允许输入30个字)