迷宫编程

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

阅读更多
个人分类: C与C++ 初级经验
上一篇双核与单核之区别?
下一篇数组数据循环移动
想对作者说点什么? 我来说一句

迷宫程序(VC图形化界面)

2008年03月16日 1.13MB 下载

没有更多推荐了,返回首页

关闭
关闭