迷宮課程設(shè)計_第1頁
迷宮課程設(shè)計_第2頁
迷宮課程設(shè)計_第3頁
迷宮課程設(shè)計_第4頁
迷宮課程設(shè)計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

課程設(shè)計說明書【此頁單獨打印】課程名稱:數(shù)據(jù)結(jié)構(gòu)與算法B綜合課程設(shè)計課程代碼: 6013799題 目:DFS生成迷宮與迷宮的BFS、DFS搜索年級/專業(yè)/班:2012/計算機科學(xué)與技術(shù)/04班學(xué)生姓名學(xué)號312012080605426開始時間2012年12月20日完成時間2012年12月24日課程設(shè)計成績:學(xué)習(xí)態(tài)度及平時成績(30)技術(shù)水平與實際能力(20)創(chuàng)新(5)說明書撰寫質(zhì)量(45)總分(100)指導(dǎo)教師簽名: 年_月_日

目錄摘要TOC\o"1-5"\h\z1前言 41.1問題的提出 41.2任務(wù)與分析 4\o"CurrentDocument"2.軟件總體設(shè)計 5\o"CurrentDocument"2.1開發(fā)工具 5\o"CurrentDocument"2.2系統(tǒng)框圖 5\o"CurrentDocument"2.3模塊功能 62.3.1繪圖模塊 錯誤!未定義書簽。2.3.2DFS模塊 錯誤!未定義書簽。2.3.3BFS模塊…… ?錯誤!未定義書簽。3.人機界面設(shè)計 43.1客戶區(qū)原始界面 43.2迷宮拆墻界面 43.3DFS走迷宮界面 43.4BFS走迷宮界面 44.功能詳細設(shè)計 7繪墻 拆墻 迷宮信息文本存儲4.4走迷宮(DFS) 4.5走迷宮(BFS) 錯誤!未定義書簽。錯誤!未定義書簽錯誤!未定義書簽錯誤!未定義書簽錯誤!未定義書簽錯誤!未定義書簽結(jié)論 205軟件測試 錯誤!未定義書簽。錯誤!未定義書簽錯誤!未定義書簽錯誤!未定義書簽錯誤!未定義書簽錯誤!未定義書簽結(jié)論 20致謝 20參考文獻 錯誤!未定義書簽。摘要迷宮是一種充滿復(fù)雜通道的建筑物,很難找到從其內(nèi)部到達入口或從入口到達中心的道路。比喻復(fù)雜艱深的問題或難以捉摸的局面。迷宮從古代就有人在研究并加以運用,它擁有千百年的歷史,迷宮問題向來經(jīng)典,有很多人都在研究它,以至于有很多迷宮相關(guān)的算法,要走迷宮首先要形成迷宮,這里采用常見的DFS深度優(yōu)先搜索算法生成迷宮這樣生成的迷宮是迷宮各個點所組成圖的一個生成樹,所以可以保證迷宮中任意兩點都有路徑到達,并且迷宮中沒有環(huán)路(完美迷宮),迷宮拆完墻以后就構(gòu)成了一條通道,當(dāng)然為了下一次生成同樣的迷宮,迷宮的拆墻信息以及各個單元格的四面墻的信息都應(yīng)該以文件的形式進行保存,以便下一次讀取恢復(fù)原來迷宮的形態(tài),走迷宮采用DFS、BFS兩種搜索方法,DFS的特點:縱深進行到底,采用STL的stack存儲數(shù)據(jù)。BFS的特點:寬度進行到底,采用STL的queue儲存數(shù)據(jù)。調(diào)用gui函數(shù)并且采用Sleep()的方式將程序掛起,計算機一邊運算一邊動態(tài)展現(xiàn),最終到達出口。關(guān)鍵詞:DFSBFSGUIstackqueue1前言1.1問題的提出為了更深刻地理解DFS、BFS搜索算法的搜索原理,為了了解gui相關(guān)函數(shù)的調(diào)用,為了將所學(xué)算法運用于生活中實際中我們編寫了這個走迷宮程序。1.2任務(wù)與分析基于圖形用戶界面GUI的標準“Windows”應(yīng)用程序。貼圖表現(xiàn):迷宮(二維平面圖案,包括墻壁和通道)。動畫表現(xiàn):動態(tài)表現(xiàn)迷宮生成和求解的每一步變化過程。迷宮大小:N和M(用戶輸入),允許范圍:10?30,缺省值:15和15。迷宮格子:N*M大小的迷宮由N*M個格子構(gòu)成,每個格子有東、南、西、北四堵墻,迷宮生成過程就是對所有格子進行一次遍歷——拆墻過程,遍歷完成后迷宮就生成了。迷宮入口和出口:分別在第0行和第N-1行上隨機選擇。算法要求:(1)生成的迷宮有解;(2)禁用遞歸程序;(3)保證每次生成的迷宮不同,這要求生成時用隨機函數(shù)(時間種子)。迷宮類型:生成的是完美迷宮即單連通迷宮,迷宮中不存在環(huán),且不存在不可訪問區(qū)域,迷宮中任意兩點之間有且僅有唯一的路徑(參考:圖的生成樹)。文件存儲:將生成的迷宮保存在文件中(用文本文件,迷宮數(shù)據(jù)的存儲格式自定);迷宮求解時,從相應(yīng)的迷宮文件中讀取迷宮數(shù)據(jù),然后求解。界面設(shè)計要求操作流程簡便合理,操作界面美觀自然,符合用戶一般操作習(xí)慣。界面簡潔美觀,配色和諧,比例合適,符合大多數(shù)人的審美趣向。菜單設(shè)置“使用說明”,介紹本軟件的開發(fā)者、特色、各項功能及使用。2.軟件總體設(shè)計2.1開發(fā)工具開發(fā)工具:visualC++6.0(企業(yè)版)優(yōu)點:模塊加載速度快,界面簡單易操作開發(fā)環(huán)境:windows7(旗艦版x64系統(tǒng))運行環(huán)境windows95以上2.2系統(tǒng)框圖(1)系統(tǒng)組成框圖WinMain(函數(shù)入口)DFSWinMain(函數(shù)入口)DFS走迷宮BFS走迷宮DFS(拆墻)圖2-12)系統(tǒng)流程圖:

2.3模塊功能軟件開發(fā)方式:SDKGUI函數(shù)模塊:DrawWhiteGround(HDChdc);//將整個客戶區(qū)繪制為白色DrawRedBlock(HDChdc,intl,intt,intr,intb);//繪制迷宮起始點與終止點八、、DrawRect (HDChdc, intl, intt, intr, intb);//繪制單元方格DrawCell (HDChdc, intl, intt, intr, intb);//繪制移動方塊DrawGamePlace(HDChdc,intcol,introw);//在客戶區(qū)繪滿單元格Adj(intx,inty,bool*visited,intcol);//判斷該單元格是否有沒有被訪問的相鄰單元格Adj_NoWall(intx,inty,bool*visited,Wall*wall,intcol);//判斷該單元格是否有沒有被訪問的相鄰單元格并且周圍沒有墻可以訪問Replace(HDChdc,intx,inty,intz,intk);//拆墻(用白色劃線替換紅色劃線)文件操作模塊:WriteDocument(MazeEdge*mazeedge,Wall*wall,inti);//將迷宮拆墻數(shù)據(jù)寫入txt文件中ReadDocument(HDChdc);//從txt文件中讀取迷宮拆墻數(shù)據(jù)核心算法模塊:DrawPath(HDChdc,intw,inth);//迷宮拆墻DFS(HDChdc);//深度優(yōu)先搜索尋找迷宮路徑BFS(HDChdc);//廣度優(yōu)先搜索尋找迷宮路徑動態(tài)效果關(guān)鍵函數(shù):Sleep()3人機界面設(shè)計

圖3-1客戶區(qū)原始界面圖3-2迷宮拆墻界面圖3-3DFS走迷宮界面圖3-4BFS走迷宮界面4功能詳細設(shè)計GUI函數(shù)模塊:1)//將整個客戶區(qū)繪制為白色voidDrawWhiteGround(HDChdc){intcol,row;std::ifstreamf("C:\\迷宮拆墻數(shù)據(jù).txt");f>>col>>row;f.close();HBRUSHhbrush=CreateSolidBrush(RGB(255,255,255));SelectObject(hdc,hbrush);Rectangle(hdc,0,0,col*CELL,row*CELL);DeleteObject(hbrush);}2)//繪制迷宮起始點與終止點voidDrawRedBlock(HDChdc,intl,intt,intr,intb){HBRUSHhbrush=CreateSolidBrush(RGB(255,0,0));SelectObject(hdc,hbrush);Rectangle(hdc,l,t,r,b);DeleteObject(hbrush);}//畫單元格,后面四個參數(shù)依次為左上坐標和右下坐標voidDrawRect(HDChdc,intl,intt,intr,intb){MoveToEx(hdc,l,t,NULL);//將起始點移動到(l,t)LineTo(hdc,r,t);LineTo(hdc,r,b);LineTo(hdc,l,b);LineTo(hdc,l,t);}//用綠色畫刷畫移動目標voidDrawCell(HDChdc,intl,intt,intr,intb){HBRUSHhbrush;hbrush=CreateSolidBrush(RGB(0,255,0));//綠色畫刷SelectObject(hdc,hbrush);Rectangle(hdc,l,t,r,b);DeleteObject(hbrush);}//在客戶區(qū)繪滿單元格voidDrawGamePlace(HDChdc,intcol,introw){inti,j;HPENhpen1;hpen1=CreatePen(PS_SOLID,1,RGB(255,0,0));//繪制游戲區(qū)域方格線(紅色)SelectObject(hdc,hpen1);for(i=0;i<row;i++)for(j=0;j<col;j++)DrawRect(hdc,j*CELL,i*CELL,(j+1)*CELL,(i+1)*CELL);DeleteObject(hpen1);}//判斷該單元格是否有沒有被訪問的相鄰單元格boolAdj(intx,inty,bool*visited,intcol){if((x-1>-1)&&!visited[y*col+x-1]||(x+1<W)&&!visited[y*col+x+1]||\y-1>-1&&!visited[(y-1)*col+x]||y+1<H&&!visited[(y+1)*col+x])returntrue;returnfalse;}//判斷該單元格是否有沒有被訪問的相鄰單元格并且周圍沒有墻可以訪問boolAdj_NoWall(intx,inty,bool*visited,Wall*wall,intcol){if((x-1>-1)&&!visited[y*col+x-1]&&wall[y*col+x].wall_l==0||(x+1<W)&&!visited[y*col+x+1]&&wall[y*col+x].wall_r==0||\y-1>-1&&!visited[(y-1)*col+x]&&wall[y*col+x].wall_t==0||y+1<H&&!visited[(y+1)*col+x]&&wall[y*col+x].wall_b==0)returntrue;returnfalse;}//拆墻(用白色劃線替換紅色劃線)voidReplace(HDChdc,intx,inty,intz,intk){HPENhpen;hpen=CreatePen(PS_SOLID,1,RGB(255,255,255));SelectObject(hdc,hpen);MoveToEx(hdc,x,y,NULL);LineTo(hdc,z,k);DeleteObject(hpen);}文件操作模塊://將迷宮拆墻數(shù)據(jù)寫入txt文件中voidWriteDocument(MazeEdge*mazeedge,Wall*wall,inti){intj;std::ofstreamf("C:\\迷宮拆墻數(shù)據(jù).txt");f<<W<<""<<H<<std::endl;//寫入拆墻數(shù)據(jù)for(j=0;j<i+1;j++)f<<mazeedge[j].x<<""<<mazeedge[j].y<<""\<<mazeedge[j].z<<""<<mazeedge[j].w<<std::endl;f.close();std::ofstreamf1("C:\\每個單元格四面墻的數(shù)據(jù).txt");//寫入每個單元格四面墻的數(shù)據(jù)for(j=0;j<i+2;j++)f1<<wall[j].wall_l<<""<<wall[j].wall_t<<""\<<wall[j].wall_r<<""<<wall[j].wall_b<<std::endl;f1.close();}2)//從txt文件中讀取迷宮拆墻數(shù)據(jù)boolReadDocument(HDChdc){intcol,row,i;MazeEdge*mazeedge;std::ifstreamf("C:\\迷宮拆墻數(shù)據(jù).txt");if(f.fail())//打開文件失敗returnfalse;else{f>>col>>row;f.close();}DrawGamePlace(hdc,col,row);//在客戶區(qū)繪滿紅色單元格mazeedge=newMazeEdge[col*row-1];f.open("C:\\迷宮拆墻數(shù)據(jù).txt");f>>col>>row;for(i=0;i<col*row-l;i++)//從txt文檔中讀入數(shù)據(jù)f>>mazeedge[i].x>>mazeedge[i].y>>\mazeedge[i].z>>mazeedge[i].w;f.close();for(i=0;i<col*row-l;i++)//拆墻Replace(hdc,mazeedge[i].x,mazeedge[i].y,mazeedge[i].z,mazeedge[i].w);returntrue;}核心算法模塊:1)//迷宮拆墻voidDrawPath(HDChdc,intcol,introw){intx,y,temp,i(-1);bool*visited; //訪問標記POSITION*position;//儲存每個單元格的坐標POSITIONw;std::stack<POSITION>Stack;MazeEdge*mazeedge;Wall*wall;//儲存每個單元格的墻的情況wall=newWall[col*row];//申請col*row個單元格for(x=0;x<row;x++)//請所有單元格的四面墻初始化為都有狀態(tài)for(y=0;y<col;y++){wall[x*col+y].wall_l=1;wall[x*col+y].wall_t=1;wall[x*col+y].wall_r=1;wall[x*col+y].wall_b=1;}visited=newbool[col*row];//訪問標記for(x=0;x<row;x++)for(y=0;y<col;y++)visited[x*col+y]=false;//初始為未訪問狀態(tài)position=newPOSITION[col*row];for(x=0;x<row;x++)//給每個點定位for(y=0;y<col;y++){position[x*col+y].x=y*CELL;position[x*col+y].y=x*CELL;position[x*col+y].index_x=y;position[x*col+y].index_y=x;}mazeedge=newMazeEdge[col*rowT];//—棵樹有頂點數(shù)-1條邊MessageBox(NULL,TEXT(〃現(xiàn)在開始拆墻〃),TEXT(〃消息〃),NULL);srand(time(NULL));//系統(tǒng)時間作隨機種子x=rand()%col;//隨機產(chǎn)生起始點y=rand()%row;Stack.push(position[y*col+x]);//迷宮入口進棧visited[y*col+x]=true;//標記已經(jīng)訪問過while(!Stack.empty()){w=Stack.top();while(Adj(w.index_x,w.index_y,visited,col))//如果該單元格有沒有被訪問{temp=rand()%4;if(temp==0&&(w.index_x+1<col)&&!visited[w.index_y*col+w.index_x+1])//右{Sleep(50);i++;mazeedge[i].x=w.x+CELL;/*記錄迷宮的拆墻數(shù)據(jù)*/mazeedge[i].y=w.y;mazeedge[i].z=w.x+CELL;mazeedge[i].w=w.y+CELL;wall[w.index_y*col+w.index_x].wall_r=0;//單元格(w.index_x,w.index_y)wall[w.index_y*col+w.index_x+1].wall_l=0;(w.index_x+1,w.index_y)的左墻被拆除Replace(hdc,w.x+CELL,w.y,w.x+CELL,w.y+CELL);//拆右豎墻visited[w.index_y*col+w.index_x+l]=true;//標記已經(jīng)訪問過的單元格Stack.push(position[w.index_y*col+w.index_x+1]);//符合條件的相鄰單元w=Stack.top();}if(temp==1&&(w.index_x—l>—l)&&!visited[w.index_y*col+w.index_x—l])//左移{Sleep(50);i++;mazeedge[i].x=w.x;/*記錄迷宮的拆墻數(shù)據(jù)*/mazeedge[i].y=w.y;mazeedge[i].z=w.x;mazeedge[i].w=w.y+CELL;wall[w.index_y*col+w.index_x].wall_l=0;wall[w.index_y*col+w.index_x—1].wall_r=0;Replace(hdc,w.x,w.y,w.x,w.y+CELL);//拆左豎墻,左拆與右拆不一樣visited[w.index_y*col+w.index_xT]=true;//標記已經(jīng)訪問過的單元格Stack.push(position[w.index_y*col+w.index_x—1]);w=Stack.top();}if(temp==2&&(w.index_y—1>—1)&&!visited[(w.index_y—1)*col+w.index_x]){Sleep(50);i++;mazeedge[i].x=w.x;/*記錄迷宮的拆墻數(shù)據(jù)*/mazeedge[i].y=w.y;mazeedge[i].z=w.x+CELL;mazeedge[i].w=w.y;wall[w.index_y*col+w.index_x].wall_t=0;wall[(w.index_y—1)*col+w.index_x].wall_b=0;Replace(hdc,w.x,w.y,w.x+CELL,w.y);//拆橫墻visited[(w.index_yT)*col+w.index_x]=true;//標記已經(jīng)訪問過的單元格Stack.push(position[(w.index_y—1)*col+w.index_x]);w=Stack.top();}if(temp==3&&(w.index_y+1<row)&&!visited[(w.index_y+1)*col+w.index_x]){Sleep(50);i++;mazeedge[i].x=w.x;/*記錄迷宮的拆墻數(shù)據(jù)*/mazeedge[i].y=w.y+CELL;mazeedge[i].z=w.x+CELL;mazeedge[i].w=w.y+CELL;wall[w.index_y*col+w.index_x].wall_b=0;wall[(w.index_y+1)*col+w.index_x].wall_t=0;Replace(hdc,w.x,w.y+CELL,w.x+CELL,w.y+CELL);//拆橫墻visited[(w.index_y+1)*col+w.index_x]=true;//標記已經(jīng)訪問過的單元格Stack.push(position[(w.index_y+1)*col+w.index_x]);w=Stack.top();}}Stack.pop();//回溯}WriteDocument(mazeedge,wall,i);//將迷宮拆墻數(shù)據(jù)寫入txt文件}//深度優(yōu)先搜索尋找迷宮路徑voidDFS(HDChdc){intcol,row,entrance,exit,i,j;bool*visited=NULL;//訪問標示boolstatus(false);//走迷宮狀態(tài)POSITION*position二NULL;//記錄各個單元的坐標POSITIONw;//臨時中間變量Wall*wall=NULL;//儲存單元格四面墻的信息std::stack<POSITION>Stack;std::ifstreamf("C:\\迷宮拆墻數(shù)據(jù).txt"); /*讀迷宮規(guī)模數(shù)據(jù)*/f>>col>>row;//從txt文件中獲取原來迷宮的規(guī)模f.close();wall=newWall[col*row];std::ifstreamf1("C:\\每個單元格四面墻的數(shù)據(jù).txt");/*讀迷宮墻的信息*/for(i=0;i<col*row;i++)//從txt文檔中讀入每個單元格四面墻數(shù)據(jù)f1>>wall[i].wall_l>>wall[i].wall_t>>wall[i].wall_r>>wall[i].wall_b;f1.close();srand(time(NULL));//系統(tǒng)時間作隨機種子entrance=rand()%col;//隨機在迷宮第一行和最后一行分別產(chǎn)生入口與出口exit=rand()%col;visited=newbool[col*row];//訪問標記for(i=0;i<row;i++)for(j=0;j<col;j++)visited[i*col+j]=false;//初始為未訪問狀態(tài)position=newPOSITION[col*row];for(i=0;i<row;i++)//給每個點定位for(j=0;j<col;j++){position[i*col+j].x=j*CELL;position[i*col+j].y=i*CELL;position[i*col+j].index_x=j;position[i*col+j].index_y=i;}Stack.push(position[entrance]);//迷宮入口進棧visited[entrance]=true;DrawRedBlock(hdc,entrance*CELL+6,6,(entrance+1)*CELL-6,CELL-6);DrawRedBlock(hdc,exit*CELL+6,(row-1)*CELL+6,(exit+1)*CELL-6,row*CELL-6);//繪制迷宮出口while(!Stack.empty()&&!status){w=Stack.top();while(Adj_NoWall(w.index_x,w.index_y,visited,wall,col))//女口果有還{if(wall[w.index_y*col+w.index_x].wall_b==0&&!visited[(w.index_y+1)*col+w.index_x]){Sleep(200);DrawCell(hdc,w.x+6,w.y+CELL+6,w.x+CELL-6,w.y+2*CELL-6);visited[(w.index_y+1)*col+w.index_x]=true;Stack.push(position[(w.index_y+l)*col+w.index_x]);//入棧w=Stack.top();}elseif(wall[w.index_y*col+w.index_x].wall_r==0&&!visited[(w.index_y)*col+w.index_x+1]){Sleep(200);DrawCell(hdc,w.x+CELL+6,w.y+6,w.x+2*CELL-6,w.y+CELL-6);//使移動目visited[w.index_y*col+w.index_x+1]=true;Stack.push(position[w.index_y*col+w.index_x+l]);//入棧w=Stack.top();elseif(wall[w.index_y*col+w.index_x].wall_l==0&&!visited[w.index_y*col+w.index_x-1])Sleep(200);DrawCell(hdc,w.x-CELL+6,w.y+6,w.x-6,w.y+CELL-6);visited[w.index_y*col+w.index_x-1]=true;Stack.push(position[w.index_y*col+w.index_x-1]);//入棧w=Stack.top();}elseif(wall[w.index_y*col+w.index_x].wall_t==0&&!visited[(w.index_y-1)*col+w.index_x]){Sleep(200);DrawCell(hdc,w.x+6,w.y-CELL+6,w.x+CELL-6,w.y-6);visited[(w.index_y-1)*col+w.index_x]=true;Stack.push(position[(w.index_y-1)*col+w.index_x]);//入棧w=Stack.top();if(w.index_y==row-1&&w.index_x==exit)//如果到達迷宮出口則停止搜索{DrawRedBlock(hdc,exit*CELL+6,(row-1)*CELL+6,(exit+1)*CELL-6,row*CELL-6);MessageBox(NULL,TEXT("成功走出迷宮!"),TEXT("Congratunations"),MB_ICONINFORMATION);status=true;break;}}Stack.popO;//回溯}}//廣度優(yōu)先搜索尋找迷宮路徑voidBFS(HDChdc){intcol,row,entrance,exit,i,j;bool*visited=NULL;//訪問標示boolstatus(false);//走迷宮狀態(tài)POSITION*position二NULL;//記錄各個單元的坐標POSITIONu;//臨時中間變量Wall*wall=NULL;//儲存單元格四面墻的信息std::queue<POSITION>Queue;charBuffer[20];std::ifstreamf("C:\\迷宮拆墻數(shù)據(jù).txt"); /*讀迷宮規(guī)模數(shù)據(jù)*/f>>col>>row;//從txt文件中獲取原來迷宮的規(guī)模f.close();wall=newWall[col*row];std::ifstreamf1("C:\\每個單元格四面墻的數(shù)據(jù).txt");/*讀迷宮墻的信息*/for(i=0;i<col*row;i++)//從txt文檔中讀入每個單元格四面墻數(shù)據(jù)f1>>wall[i].wall_l>>wall[i].wall_t>>wall[i].wall_r>>wall[i].wall_b;f1.close();srand(time(NULL));//系統(tǒng)時間作隨機種子entrance=rand()%col;//隨機在迷宮第一行和最后一行分別產(chǎn)生入口與出口exit=rand()%col;visited=newbool[col*row];//訪問標記for(i=0;i<row;i++)for(j=0;j<col;j++)visited[i*col+j]=false;//初始為未訪問狀態(tài)position=newPOSITION[col*row];for(i=0;i<row;i++)//給每個點定位for(j=0;j<col;j++){position[i*col+j].x=j*CELL;position[i*col+j].y=i*CELL;position[i*col+j].index_x=j;position[i*col+j].index_y=i;}Queue.push(position[entrance]);//迷宮入口進隊列visited[entrance]=true;DrawRedBlock(hdc,entrance*CELL+6,6,(entrance+1)*CELL-6,CELL-6);DrawRedBlock(hdc,exit*CELL+6,(row-1)*CELL+6,(exit+1)*CELL-6,row*CELL-6);//繪制迷宮出口while(!Queue.empty()){u=Queue.front();Queue.pop();if(Adj_NoWall(u.index_x,u.index_y,visited,wall,col)){if((u.index_y+1<row)&&!visited[(u.index_y+1)*col+u.index_x]&&wall[u.index_y*col+u.index_x].wall_b==O)//如果作相鄰單元格沒有被訪問過,并且可以被訪問{Sleep(100);DrawCell(hdc,u.x+6,u.y+CELL+6,u.x+CELL-6,u.y+2*CELL-6);visited[(u.index_y+1)*col+u.index_x]=true;Queue.push(position[(u.index_y+1)*col+u.index_x]);//下單元格進隊列}if((u.index_x-1>-1)&&!visited[u.index_y*col+u.index_x-1]&&wall[u.index_y*col+u.index_x].wall_l==O)//如果作相鄰單元格沒有被訪問過,并且可以被訪問{Sleep(100);DrawCell(hdc,u.x-CELL+6,u.y+6,u.x-6,u.y+CELL-6);//畫左單元格visited[u.index_y*col+u.index_x-1]=true;Queue.push(position[u.index_y*col+u.index_x-l]);//左單元格進隊列}if((u.index_x+1<col)&&!visited[

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論