数据结构课程设计- (二) 栈与队列(迷宫问题)
生活随笔
收集整理的這篇文章主要介紹了
数据结构课程设计- (二) 栈与队列(迷宫问题)
小編覺得挺不錯的,現(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2063):vue的生命周期
- 下一篇: “约见”面试官系列之常见面试题之第五十九