資源簡介
這是一個(gè)迷宮問題的求解,有八個(gè)方向。下了就知道

代碼片段和文件信息
//#include?
#include?
#include?
#include?
#include?
#define?N?20/*迷宮的大小,可改變*/
int??oldmap[N][N];/*遞歸用的數(shù)組用全局變量節(jié)約時(shí)間*/
int??yes=0;/*yes是判斷是否找到路的標(biāo)志1找到,0沒找到*/
int??way[100][2]wayn=0;/*way數(shù)組是顯示路線用的wayn是統(tǒng)計(jì)走了幾個(gè)格子*/
void?Init(void);/*圖形初始化*/
void?Close(void);/*圖形關(guān)閉*/
void?DrawPeople(int?*xint?*yint?n);/*畫人工探索物圖*/
void?PeopleFind(int?(*x)[N]);/*人工探索*/
void?WayCopy(int?(*x)[N]int?(*y)[N]);/*為了8個(gè)方向的遞歸,把舊迷宮圖拷貝給新數(shù)組*/
int??FindWay(int?(*x)[N]int?iint?j);/*自動探索函數(shù)*/
void?MapRand(int?(*x)[N]);/*隨機(jī)生成迷宮函數(shù)*/
void?PrMap(int?(*x)[N]);/*輸出迷宮圖函數(shù)*/
void?Result(void);/*輸出結(jié)果處理*/
void?Find(void);/*成功處理*/
void?NotFind(void);/*失敗處理*/
void?main(void)/*主函數(shù)*/
{
???int?map[N][N];?/*迷宮數(shù)組*/
???char?ch;
???clrscr();
???printf(“\n?Please?select?hand(1)?else?auto\n“);/*選擇探索方式*/
???scanf(“%c“&ch);
???Init();??/*初始化*/
???MapRand(map);/*生成迷宮*/
???PrMap(map);/*顯示迷宮圖*/
???if(ch==‘1‘)
??????PeopleFind(map);/*人工探索*/
???else
??????FindWay(map11);/*系統(tǒng)自動從下標(biāo)11的地方開始探索*/
???Result();/*輸出結(jié)果*/
???Close();
}
void?Init(void)/*圖形初始化*/
{
???int?gd=DETECTgm;
???initgraph(&gd&gm“c:\\tc“);
}
void?DrawPeople(int?*xint?*yint?n)/*畫人工控制圖*/
{/*如果將以下兩句注釋掉,則顯示人工走過的路徑,*/
???setfillstyle(SOLID_FILLWHITE);??/*設(shè)置白色實(shí)體填充樣式*/
???bar(100+(*y)*15-650+(*x)*15-6100+(*y)*15+650+(*x)*15+6);
/*恢復(fù)原通路*/
???switch(n)/*判斷xy的變化,8個(gè)方向的變化*/
???{
??????case?1:?(*x)--;break;?/*上*/
??????case?2:?(*x)--;(*y)++;break?;/*右上*/
??????case?3:?(*y)++;break;??/*右*/
??????case?4:?(*x)++;(*y)++;break;?/*右下*/
??????case?5:?(*x)++;break;??/*下*/
??????case?6:?(*x)++;(*y)--;break;?/*左下*/
??????case?7:?(*y)--;break;??/*左*/
??????case?8:?(*x)--;(*y)--;break;?/*左上*/
???}
???setfillstyle(SOLID_FILLRED);/*新位置顯示探索物*/
???bar(100+(*y)*15-650+(*x)*15-6100+(*y)*15+650+(*x)*15+6);
}
void?PeopleFind(int?(*map)[N])/*人工手動查找*/
{
???int?xy;
???char?c=0;/*接收按鍵的變量*/
???x=y=1;/*人工查找的初始位置*/
???setcolor(11);
???line(500200550200);
???outtextxy(570197“d“);
???line(500200450200);
???outtextxy(430197“a“);
???line(500200500150);
???outtextxy(497130“w“);
???line(500200500250);
???outtextxy(497270“x“);
???line(500200450150);
???outtextxy(445130“q“);
???line(500200550150);
???outtextxy(550130“e“);
???line(500200450250);
???outtextxy(445270“z“);
???line(500200550250);
???outtextxy(550270“c“);/*以上是畫8個(gè)方向的控制介紹*/
???setcolor(YELLOW);
???outtextxy(420290“Press?‘Enter‘?to?end“);/*壓回車鍵結(jié)束*/
???setfillstyle(SOLID_FILLRED);
???bar(100+y*15-650+x*15-6100+y*15+650+x*15+6);/*入口位置顯示*/
???while(c!=13)/*如果按下的不是回車鍵*/
???{
??????c=getch();/*接收字符后開始各個(gè)方向的探索*/
??????if(c==‘w‘&&map[x-1][y]!=1)
?DrawPeople(&x&y1);/*上*/
??????else
?if(c==‘e‘&&map[x-1][y+1]!=1)
????DrawPeople(&x&y2);/*右上*/
?else
????if(c==‘d‘&&map[x][y+1]!=1)
???????DrawPeople(&x&y3);/*右*/
????else
???????if(c==‘c‘&&map[x+1][y+1]!=1)
??DrawPeople(&x&y4);/*右下*/
???????else
??if(c==‘x‘&&map[x+1][y]!=1
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4199??2008-10-28?22:02??迷宮\迷宮.dsp
?????文件????????533??2008-10-28?22:02??迷宮\迷宮.dsw
?????文件??????33792??2008-10-28?22:03??迷宮\Debug\vc60.idb
?????文件??????36864??2008-10-28?22:03??迷宮\Debug\vc60.pdb
?????文件?????224192??2008-10-28?22:03??迷宮\Debug\迷宮.pch
?????文件???????4705??2008-10-28?22:03??迷宮\迷宮.plg
?????文件???????7576??2008-10-28?22:03??迷宮\1.cpp
?????目錄??????????0??2008-10-28?22:02??迷宮\Debug
?????目錄??????????0??2008-10-28?22:02??迷宮
-----------?---------??----------?-----??----
???????????????311861????????????????????9
評論
共有 條評論