迷宫编程

原创 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测试。

相关文章推荐

ios编程实现迷宫

  • 2014年02月19日 19:31
  • 32KB
  • 下载

上机编程题-迷宫问题

algorithm

迷宫问题 c++编程实现

  • 2008年12月16日 22:38
  • 2KB
  • 下载

430单片机迷宫编程小车

  • 2011年08月19日 09:43
  • 13KB
  • 下载

小编程题--解决一维迷宫问题

题目源于计蒜客,如下题目给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 请确认你是否能够跳跃到数组的最后一个下标。 例如: A = [2...

写给妹妹的编程札记 5 - 搜索: 迷宫问题 - 广度优先搜索

让我们也使用广度优先搜索来解决一下迷宫问题,对比一下。

编程练习:走迷宫问题后续

上一篇文章中提到了走迷宫问题《编程练习:走迷宫问》题 是使用广度优先算法解除出的,最后给出了A*算法,此算法是一种静态路网中求解最短路最有效的算法。最后扯点别的:在人工智能,游戏制作中好像很有用,对于...
  • qiye005
  • qiye005
  • 2016年10月03日 16:47
  • 741

编程算法 - 迷宫的最短路径 代码(C++)

迷宫的最短路径 代码(C++)本文地址: http://blog.csdn.net/caroline_wendy题目: 给定一个大小为N*M的迷宫. 迷宫由通道和墙壁组成, 每一步可以向邻接的上下左右...

编程练习:迷宫求路

/*=========================================================================# FileName: Maze.c # D...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:迷宫编程
举报原因:
原因补充:

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