关闭

迷宫编程

标签: 编程存储图形struct读书测试
1451人阅读 评论(0) 收藏 举报
分类:

      读书的时候总听说什么迷宫问题(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测试。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43825次
    • 积分:647
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:14篇
    • 译文:0篇
    • 评论:6条
    最新评论
    程序员的调试能力和相关书籍