日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

数据结构课程设计- (二) 栈与队列(迷宫问题)

發(fā)布時間:2023/12/9 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构课程设计- (二) 栈与队列(迷宫问题) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

迷宮問題求解
任務(wù):可以輸入一個任意大小的迷宮數(shù)據(jù),用非遞歸的方法求出一條走出迷宮的路徑,并將路徑輸出;
要求:在上交資料中請寫明:存儲結(jié)構(gòu)、基本算法(可以使用程序流程圖)、源程序、測試數(shù)據(jù)和結(jié)果、算法的時間復(fù)雜度、另外可以提出算法的改進方法。

利用棧實現(xiàn)各個方向的存儲,若走到死路則退到前一格,實現(xiàn)尋找路徑的功能:

#include <bits/stdc++.h> using namespace std; #define maxsize 100 typedef struct point//點 {int x,y,dir;//1234上下左右 }block; typedef struct Stack//棧 {block b[maxsize];int top; }Linkstack; int isempty(Linkstack S)//判空 {if(S.top==-1){return 1;}else{return 0;} } void inStack(Linkstack &s,block point)//進棧 {s.top++;s.b[s.top]=point; } block outStack(Linkstack &s)//出棧 {block a=s.b[s.top];s.top--;return a; } void Initstack(Linkstack &s)//初始化 {s.top=-1; } int solve() {int i,j,dir,found=0;int m,n;printf("輸入迷宮行數(shù)和列數(shù)\n");scanf("%d%d",&m,&n);int a[m][n];printf("輸入迷宮結(jié)構(gòu),1為墻,0可走\n");for(i=0;i<m;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);}}int x1,y1,x2,y2;printf("輸入起點和終點\n");scanf("%d%d%d%d",&x1,&y1,&x2,&y2);int jixu=1;if(a[x1][y1]=='1'){printf("入口選擇錯誤");jixu=0;}if(a[x2][y2]=='1'){printf("出口選擇錯誤");jixu=0;}Linkstack s;Initstack(s);s.top++;s.b[s.top].x=x1,s.b[s.top].y=y1;s.b[s.top].dir=0;a[x1][y1]=-1;//防重復(fù)if(jixu==1){while(isempty(s)!=1){i=s.b[s.top].x,j=s.b[s.top].y;dir=s.b[s.top].dir;if(i==x2&&j==y2)//找到終點{printf("路徑如下:\n");for(int k=0;k<=s.top;k++)//輸出棧中內(nèi)容{printf("(%d,%d)",s.b[k].x,s.b[k].y);int to=s.b[k].dir;if(to==1){printf("再向上一格\n");}else if(to==2){printf("再向下一格\n");}else if(to==3){printf("再向左一格\n");}else if(to==4){printf("再向向右一格\n");}}return 1;}found=0;dir=0;while(dir<=4&&found==0){dir++;//printf("%d",dir);switch(dir){case 1:i=(s.b[s.top].x-1);j=s.b[s.top].y;break;case 2:i=(s.b[s.top].x+1);j=s.b[s.top].y;break;case 3:i=s.b[s.top].x;j=(s.b[s.top].y-1);break;case 4:i=s.b[s.top].x;j=(s.b[s.top].y+1);break;}if(a[i][j]==0)//要走的方向不是墻體{found=1;}}if(found==1)//找到一個可以走的{s.b[s.top].dir=dir;block q;q.x=i,q.y=j;q.dir=dir;inStack(s,q);//入棧a[i][j]=-1;dir=0;}else//找不到了,該點是死路,退棧{a[s.b[s.top].x][s.b[s.top].y]=0;s.top--;}}}return 0; } int main() {int a=solve();if(a==0)printf("未找到路線\n"); }

輸入:
1 1 1 1 1 1
1 0 0 1 1 1
1 1 0 1 1 1
1 1 0 0 0 1
1 1 1 1 0 1
1 1 1 1 1 1

總結(jié)

以上是生活随笔為你收集整理的数据结构课程设计- (二) 栈与队列(迷宫问题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。