您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C语言-自动生成查找迷宫最短路径的代码
#includestdio.h#includestdlib.h#includetime.h#includestack#includequeueusingnamespacestd;#defineOVERFLOW0#defineOK1#defineERROE0#defineTRUE1#defineFALSE0#defineSIZE102//ÃÔ¹¬µÄ×î´ó·¶Î§typedefintStatus;typedefstruct{intx;inty;}PosType;//×ø±êλÖÃtypedefstruct{PosTypeseat;//ͨµÀ¿éÔÚÃÔ¹¬ÖеÄ×ø±êλÖÃintdi;//´ÓÉÏһͨµÀ¿é×ßÏò´ËͨµÀ¿éµÄ·½Ïò}SElemType;voidRandom(int(*mg)[SIZE],intsize,PosTypestart,PosTypeend);/*Ëæ»úÉú³ÉÃÔ¹¬µÄº¯Êý/*ΪÁËÄܹ»Èþ¡Á¿ÄÜͨ¹ý£¬½«ÄÜͨ¹ýµÄ¿éºÍ²»ÄÜͨ¹ýµÄ¿éÊýÁ¿±È´óÖÂΪ3:1*/StatusPass(PosTypee,int(*mg)[SIZE]);//µ±Ç°¿é¿É·ñͨ¹ýStatusFootPrint(PosTypee,int(*mg)[SIZE]);//ÁôÏÂͨ¹ýµÄ×ã¼£PosTypeNextPos(PosTypee,intdir);//ÏÂÒ»²½StatusEqual(PosTypee1,PosTypee2);//e1Óëe2µÄλÖÃ×ø±êÊÇ·ñÏàͬStatusMarkPath(PosTypee,int(*mg)[SIZE],intdi);//¶Ô×î¶Ì¿ÉÐз¾¶Éϵġ°Í¨µÀ¿é¡±½øÐбê¼ÇPosTypeFrontPos(PosTypee,intdir);//Ñ°ÕÒµ±Ç°Í¨µÀ¿éµÄÉÏÒ»²½µÄλÖÃStatusPathPrint(stackSElemTypes,int(*mg)[SIZE]);//ÃÔ¹¬×î¶Ì·¾¶µÄ±ê¼ÇStatusPathClean(int(*mg)[SIZE],stackSElemTypes);//·¾¶Çå³ýStatusMazePath(PosTypestart,PosTypeend,int(*mg)[SIZE],stackSElemType&s);/*ÃÔ¹¬º¯Êý/*ÈôÃÔ¹¬mazeÖдÓÈë¿Ústartµ½³ö¿ÚendµÄͨµÀ£¬ÔòÇóµÃÒ»Ìõ´æ·ÅÔÚÕ»ÖÐ/*²¢·µ»ØTRUE£»·ñÔò·µ»ØFALSE*/voidPrintMaze(int(*mg)[SIZE],intsize);//´òÓ¡ÃÔ¹¬StatusCheck(char&choice);//È·ÈÏÊäÈëÕýÈ·intmain(){stackSElemTypes;intmg[SIZE][SIZE]={1},size;PosTypestart,end;charchoice;system(modeconcols=220lines=220);printf(\n==================ÃÔ¹¬×î¶Ì·¾¶ÓÎÏ·==================);printf(\n˵Ã÷:¡ö²»ÄÜ×ßµÄÇøÓò);printf(\n'¿Õ¸ñ'´ú±í¿Éͨ¹ýµÄÇøÓò);printf(\nĬÈÏÆðµãΪ×óÉϽÇλÖã¬Ä¬ÈÏÖÕµãΪÓÒϽÇλÖÃ\n);printf(\n============================================\n);printf(ÇëÊäÈëÃÔ¹¬±ß³¤(3~%d),ϵͳ½«ÎªÄã²úÉúÒ»¸öËæ»úÃÔ¹¬£º,SIZE-2);scanf(%d,&size);while((sizeSIZE-2)||(size1)){printf(ÊäÈëÓÐÎó£¡\n);printf(ÇëÊäÈëÃÔ¹¬±ß³¤(3~%d),ϵͳ½«ÎªÄã²úÉúÒ»¸öËæ»úÃÔ¹¬£º,SIZE-2);scanf(%d,&size);}size+=2;//²¹ÉÏÍâΧgetchar();//Ìø¹ý'\n'start.x=1;start.y=1;//Æðµã×ø±êend.x=size-2;end.y=size-2;//ÖÕµã×ø±êRandom(mg,size,start,end);PrintMaze(mg,size);while(!((choice=='Q')||(choice=='q'))){printf(ÊÇ·ñʹÓøÃÃÔ¹¬?(y/n)\n);Check(choice);if((choice=='Y')||(choice=='y')){PathClean(mg,s);}while((choice=='n')||(choice=='N')){while(!s.empty())s.pop();choice='';printf(ÇëÊäÈëÃÔ¹¬±ß³¤(3~%d),ϵͳ½«ÎªÄã²úÉúÒ»¸öËæ»úÃÔ¹¬£º,SIZE-2);scanf(%d,&size);while((sizeSIZE-2)||(size1)){printf(ÊäÈëÓÐÎó£¡\n);printf(ÇëÊäÈëÃÔ¹¬±ß³¤(3~%d),ϵͳ½«ÎªÄã²úÉúÒ»¸öËæ»úÃÔ¹¬£º,SIZE-2);scanf(%d,&size);}size+=2;//²¹ÉÏÍâΧstart.x=1;start.y=1;//Æðµã×ø±êend.x=size-2;end.y=size-2;//ÖÕµã×ø±êgetchar();//Ìø¹ý'\n'Random(mg,size,start,end);PrintMaze(mg,size);printf(ÊÇ·ñʹÓøÃÃÔ¹¬?(y/n)\n);Check(choice);}printf(ÊÇ·ñÈ˹¤Ñ¡ÔñÆðµãºÍÖÕµã(y/n)?¡¾Ä¬ÈÏ£ºÆðµã(1,1),ÖÕµã(%d,%d)¡¿\n,size-2,size-2);Check(choice);if((choice=='y')||(choice=='Y')){printf(ÇëÊäÈë¡°Æðµã¡±×ø±ê(1~%d)Óÿոñ·Ö¸ô£º,size-2);scanf(%d%d,&start.x,&start.y);while(((start.xsize-2)||start.x1)||((start.ysize-2)||(start.y1))||!Pass(start,mg)){if(!Pass(start,mg))printf(ЩλÖò»ÄÜΪ¡°Æðµã¡±£¡\n);elseprintf(ÊäÈëÓÐÎó£¡\n);printf(ÇëÊäÈë¡°Æðµã¡±×ø±ê(1~%d)Óÿոñ·Ö¸ô£º,size-2);scanf(%d%d,&start.x,&start.y);}printf(ÇëÊäÈë¡°Öյ㡱×ø±ê(1~%d)Óÿոñ·Ö¸ô£º,size-2);scanf(%d%d,&end.x,&end.y);while(((end.xsize-2)||end.x1)||((end.ysize-2)||(end.y1))||!Pass(end,mg)||Equal(start,end)){if(!Pass(end,mg))printf(ЩλÖò»ÄÜΪ¡°Öյ㡱£¡\n);elseif(Equal(start,end))printf(¸ÃλÖÃÒÑΪÆðµã£¡\n);elseprintf(ÊäÈëÓÐÎó£¡\n);printf(ÇëÊäÈë¡°Öյ㡱×ø±ê(1~%d)Óÿոñ·Ö¸ô£º,size-2);scanf(%d%d,&end.x,&end.y);}getchar();//Ìø¹ý'\n'}MazePath(start,end,mg,s);PrintMaze(mg,size);printf(Í˳öÓÎÏ·ÇëÊäÈë\Q\·ñÔò¼ÌÐøÓÎÏ·£¡\n);choice=getchar();getchar();//Ìø¹ý'\n'}printf(\n==========³ÌÐòÍ˳ö£¬¸ÐлʹÓÃ!==========\n);return0;}voidRandom(int(*mg)[SIZE],intsize,PosTypestart,PosTypeend){inti,j,k;srand(time(NULL));for(j=0;jsize;j++)mg[0][j]=mg[size-1][j]=1;/*ÉèÖÃÃÔ¹¬ÍâΧ²»¿É×ߣ¬±£Ö¤Ö»ÓÐÒ»¸ö³ö¿ÚºÍÈë¿Ú*/for(i=1;isize-1;i++)mg[i][0]=mg[i][size-1]=1;/*ÉèÖÃÃÔ¹¬ÍâΧ²»¿É×ߣ¬±£Ö¤Ö»ÓÐÒ»¸ö³ö¿ÚºÍÈë¿Ú*/for(i=1;isize-1;i++)for(j=1;jsize-1;j++){k=rand()%4;//Ëæ»úÉú³É0¡¢1¡¢2¡¢4Èý¸öÊýif(k)mg[i][j]=0;else{mg[i][j]=1;}//else}mg[start.y][start.x]=0;mg[end.y][end.x]=0;//½«Èë¿Ú¡¢³ö¿ÚÉèÖÃΪ0¼´¿Éͨ¹ý}StatusPass(PosTypee,int(*mg)[SIZE]){if(mg[e.y][e.x]==0)//0ʱ¿ÉÒÔͨ¹ýreturnOK;//Èç¹ûµ±Ç°Î»ÖÃÊÇ¿ÉÒÔͨ¹ý£¬·µ»Ø1returnOVERFLOW;//ÆäËüÇé¿ö·µ»Ø0}StatusFootPrint(PosTypee,int(*mg)[SIZE]){mg[e.y][e.x]=7;returnOK;}PosTypeNextPos(PosTypee,intdir){PosTypeE;switch(dir){case1:E.x=e.x+1;//ÏòÓÒE.y=e.y;break;case2:E.x=e.x;//ÏòÏÂE.y=e.y+1;break;case3:E.x=e.x-1;//Ïò×óE.y=e.y;break;case4:E.x=e.x;//ÏòÉÏE.y=e.y-1;break;}returnE;}StatusEqual(PosTypee1,PosTypee2){if((e1.x==e2.x)&&(e1.y==e2.y))returnTRUE;returnFALSE;}StatusMarkPath(PosTypee,int(*mg)[SIZE],intdi){switch(di){case1://ÏòÓÒmg[e.y][e.x]=11;break;case2://ÏòÏÂmg[e.y][e.x]=12;break;case3://Ïò×ómg[e.y][e.x]=13;break;case4://ÏòÉÏmg[e.y][e.x]=14;break;}returnOK;}PosTypeFrontPos(PosTypee,intdir){PosTypeE;switch(dir){case1:E.x=e.x-1;//Ïò×óE.y=e.y;break;case2:E.x=e.x;//ÏòÉÏE.y=e.y-1;break;case3:E.x=e.x+1;//ÏòÓÒE.y=e.y;break;case4:E.x=e.x;//ÏòÏÂE.y=e.y+1;break;}returnE;}Statu
本文标题:C语言-自动生成查找迷宫最短路径的代码
链接地址:https://www.777doc.com/doc-1827682 .html