国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

迷宮問題

2019-11-17 05:48:12
字體:
來源:轉載
供稿:網友
   大家好,我是一個菜鳥,現在正在學習數據結構,希望大家指點我,我編寫了一個走迷宮的程序,希望大家指點。源程序如下:(可以動態實現)#include"time.h"
#include "stdio.h"
#include "graphics.h"
#include "conio.h"
#define null 0int a[11][15]={ ,       /定義迷宮,這是我們課程設計,所以就用老師給的了/
                ,       /0代表墻,1代表可以通行/  
                ,
                ,
                ,
                ,
                ,
                ,
                ,
                ,
               
               };
strUCt moving       /定義走動方向/
{int x;
 int y;
}move[9]=,,,,,,,,};
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!=mp->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);
   };
}void erasermouse(PLinkPosition plposition)    /擦除所走過的點/
{ int x1,y1;
 x1=105+30*(plposition->top->y-1);
 y1=65+30*(plposition->top->x-1);
 setcolor(15);
 line(x1-10,y1,x1+10,y1);
 line(x1,y1-10,x1,y1+10);
 setcolor(4);
}void mouse(PLinkPosition plposition)  /畫出當前位置/
{
 int x1,y1;
 x1=105+30*(plposition->top->y-1);
 y1=65+30*(plposition->top->x-1);
 line(x1-10,y1,x1+10,y1);
 line(x1,y1-10,x1,y1+10);
}void TIMEDELAY()      /時間延遲函數,這樣動態實現時才可以看清/
{
 clock_t time;
 time=5+clock();
 while(time>clock());

main()
{
 PLinkPosition plposition,answer;
 PPosition p;
 int i,j,d,m,n,m1,n1,x1,y1,driver=VGA,mode=VGAHI;
 int c[13][17]=;           
 clock_t times;
 initgraph(&driver,&mode,"");
 for(i=1;i<12;i++)
   for(j=1;j<16;j++)                            
     c[i][j]=a[i-1][j-1];            /c數組就是給迷宮外層加了一層墻/
 plposition=createEmptyPosition();
 plposition->top->link=null;
 push(plposition,1,1);                 /壓入初始點/
 maze();
 mouse(plposition);
 TIMEDELAY();
 erasermouse(plposition);
 a:                                             /主結構判定并找出路徑/
 for(i=plposition->top->direction;i<=9;i++)
 {
  if(i==9)
    {c[plposition->top->x][plposition->top->y]=0;

     pop(plposition);
     mouse(plposition);
     TIMEDELAY();
     erasermouse(plposition);
     goto a;
    }
  m=plposition->top->x;
  n=plposition->top->y;
  m1=m+move[i].x;
  n1=n+move[i].y;
  push(plposition,m1,n1);
  if(c[m1][n1]==0)
     {pop(plposition);
      plposition->top->direction++;
      continue;
     }
  if(judge(plposition)==0)
     {
      pop(plposition);
      continue;
     }
  mouse(plposition);
  TIMEDELAY();
  erasermouse(plposition);
  if(m1==11&&n1==15)break;
  goto a;
 }
 answer=createEmptyPosition();        /由于棧中元素彈出時是從出口到入口的路徑,所以把它們反過來/
 p=plposition->top;
 while(p!=null)
    {m=p->x;
     n=p->y;
     push(answer,m,n);
     p=p->link;
    }
 p=answer->top;
 for(i=1;i<25;i++)
    
 printf("(%d,%d)",p->x,p->y);
getch();
}          作者:曹開銳  哈爾濱工業          
QQ號:185917511(希望愛好c語言的朋友加我?。。?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望谟县| 贵南县| 铜鼓县| 甘南县| 金昌市| 运城市| 天峨县| 浦北县| 鄂温| 崇左市| 河间市| 桑日县| 濉溪县| 六盘水市| 长葛市| 迭部县| 河源市| 三河市| 宁河县| 巴林右旗| 建阳市| 威海市| 长垣县| 平南县| 桐城市| 恭城| 泽库县| 铜陵市| 呼伦贝尔市| 鹤庆县| 松滋市| 海宁市| 乐东| 定州市| 建瓯市| 珠海市| 永嘉县| 格尔木市| 新平| 潜山县| 普定县|