• 当前位置:首页>>C语言>>C语言编程实例>>迷宫问题
  • 迷宫问题
  •    大家好,我是一个菜鸟,现在正在学习数据结构,希望大家指点我,我编写了一个走迷宫的程序,希望大家指点。源程序如下:(可以动态实现)

    #include"time.h"
    #include "stdio.h"
    #include "graphics.h"
    #include "conio.h"
    #define null 0

    int a[11][15]={ {1,0,1,1,1,0,0,1,1,1,0,0,0,0,0},       /定义迷宫,这是我们课程设计,所以就用老师给的了/
                    {0,1,1,1,0,0,1,0,0,0,0,1,1,0,0},       /0代表墙,1代表可以通行/  
                    {1,0,0,1,1,1,1,0,0,0,0,0,1,0,0},
                    {0,0,1,0,0,0,0,1,0,0,0,1,0,1,1},
                    {0,0,1,0,1,1,0,1,0,0,0,0,0,0,0},
                    {1,1,0,0,1,0,0,0,1,0,1,1,0,0,0},
                    {1,0,0,0,0,1,1,0,0,0,0,0,0,0,0},
                    {1,1,0,0,1,0,0,1,0,0,0,0,0,1,0},
                    {0,0,1,1,1,0,0,1,0,0,1,1,1,1,1},
                    {1,1,0,0,0,0,0,1,1,1,0,0,0,0,1},
                    {1,0,1,1,0,0,0,0,0,1,0,0,0,0,1}
                   };
    struct moving       /定义走动方向/
    {int x;
     int y;
    }move[9]={{0,0},{1,1},{0,1},{1,0},{-1,1},{1,-1},{-1,0},{0,-1},{-1,-1}};
    typedef struct Position *PPosition;
    struct Position    /定义结构体/
    {
      int x;
      int y;
      int direction;
      PPosition link;
    };
    struct LinkPosition    /引入一层封装,其实就是好定义空栈罢了/
    {
      PPosition top;
    };
    typedef struct LinkPosition *PLinkPosition;

    PLinkPosition createEmptyPosition(void)  /建立空栈/
    {
      PLinkPosition plposition;
      plposition=(PLinkPosition)malloc(sizeof(struct LinkPosition));
      plposition->top=null;
      return(plposition);
    }

    void push(PLinkPosition plposition,int x,int y)    /压栈/
    {
      PPosition p;
      p=(PPosition)malloc(sizeof(struct Position));
      p->x=x;
      p->y=y;
      p->direction=1;
      p->link=plposition->top;
      plposition->top=p;
    }

    void pop(PLinkPosition plposition)   /弹栈/
    {
      PPosition p;
      p=plposition->top;
      plposition->top=plposition->top->link;
      free(p);
    }

    int judge(PLinkPosition plposition)   /判断这个位置是不是栈中已有的/
    {int m,n;
     PPosition p;
     m=plposition->top->x;
     n=plposition->top->y;
     p=plposition->top->link;
      while(p!=null)
        {if(p->x!=m||p->y!=n)p=p->link;
           else
             {return(0);
              break;
             }
        }
     return(1);
    }

    void maze(void)    /画迷宫/
    {
     int i,j;
     setbkcolor(1);
     setcolor(4);
     rectangle(90,50,540,380);
     for(i=80;i<380;i=i+30)
       line(90,i,540,i);
     for(i=120;i<540;i=i+30)
       line(i,50,i,380);
     for(i=0;i<11;i++)
       {for(j=0;j<15;j++)
          if(a[i][j]==1)floodfill(105+j*30,65+i*30,4);
       };
    }

    [1] [2] [3] 下一页