数据结构作业

迷宫问题,还非得用一下栈T_T

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 const int Max=1000;
 6 struct point
 7 {
 8     int x,y;
 9     bool operator== (point a) const {if(x==a.x&&y==a.y)    return 1;return 0;};
10     void print() const {cout<<x<<" "<<y;};
11 };
12 class stack
13 {
14     private:
15         point a[Max];
16         int top;
17     public:
18         stack(){top=-1;};
19         ~stack(){};
20         bool is_empty(){return top==-1?1:0;};
21         bool push(point x){a[++top]=x;return 1;};
22         bool pop();
23         point gettop(){return a[top];};
24 };
25 bool stack::pop()
26 {
27     if(!is_empty())
28     {
29         top--;
30         return 1;
31     }
32     return 0;
33 }
34 const int map[6][8]={
35     {1,1,1,1,1,1,1,1},
36     {1,0,0,1,0,0,0,1},
37     {1,1,0,0,0,0,0,1},
38     {1,0,0,1,0,1,0,1},
39     {1,0,0,0,0,0,0,1},
40     {1,1,1,1,1,1,1,1}
41 };
42 int vis[6][8];
43 stack Minpath,path;
44 int MinLength=Max,Length=0;
45 point start,end,next;
46 int dx[4]={1,-1,0,0},dy[4]={0,0,-1,1};
47 int DFS(point p)
48 {
49     if(p==end&&Length<MinLength)
50     {
51         Minpath=path;
52         MinLength=Length;
53         return 0;
54     }
55     if(vis[p.x][p.y]||map[p.x][p.y]||p.x<0||p.x>=6||p.y<0||p.y>=8)
56         return 0;
57     for(int i=0;i<4;i++)
58     {
59         next.x=p.x+dx[i];
60         next.y=p.y+dy[i];
61         Length++;
62         vis[p.x][p.y]=1;
63         path.push(next);
64         DFS(next);
65         path.pop();
66         Length--;
67         vis[p.x][p.y]=0;
68     }
69     return 0;
70 }
71 int main()
72 {
73     start.x=1,start.y=1,end.x=4,end.y=6;
74     memset(vis,0,sizeof(vis));
75     path.push(start);
76     DFS(start);
77     cout<<"最短路径长度:"<<MinLength<<endl;
78     while(!Minpath.is_empty())
79     {
80         Minpath.gettop().print();
81         cout<<endl;
82         Minpath.pop();
83     }
84     return 0;
85 }

入门搜索题

运算表达式:

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <map>
  5 using namespace std;
  6 const int Max=1000;
  7 class stack
  8 {
  9     private:
 10         int a[Max];
 11         int top;
 12     public:
 13         stack() {top=-1;};
 14         ~stack() {};
 15         bool is_empty() {return top==-1?1:0;};
 16         bool push(int x) {a[++top]=x;};
 17         bool pop();
 18         int gettop() {return a[top];};
 19 };
 20 bool stack::pop()
 21 {
 22     if(!is_empty())
 23     {
 24         top--;
 25         return 1;
 26     }
 27     return 0;
 28 }
 29
 30 class stackch
 31 {
 32     private:
 33         char a[Max];
 34         int top;
 35     public:
 36         stackch() {top=-1;};
 37         ~stackch() {};
 38         bool is_empty() {return top==-1?1:0;};
 39         bool push(int x) {a[++top]=x;};
 40         bool pop();
 41         char gettop() {return a[top];};
 42 };
 43 bool stackch::pop()
 44 {
 45     if(!is_empty())
 46     {
 47         top--;
 48         return 1;
 49     }
 50     return 0;
 51 }
 52
 53 stack num;
 54 stackch ch;
 55 char str[Max];
 56 char s,st;
 57 int t;
 58 int len,pos=0;
 59 map<char,int> sign;
 60 void init()
 61 {
 62     sign.insert(pair<char,int>(‘#‘,0));
 63     sign.insert(pair<char,int>(‘)‘,1));
 64     sign.insert(pair<char,int>(‘+‘,2));
 65     sign.insert(pair<char,int>(‘-‘,2));
 66     sign.insert(pair<char,int>(‘*‘,3));
 67     sign.insert(pair<char,int>(‘/‘,3));
 68     sign.insert(pair<char,int>(‘(‘,4));
 69 }
 70 void Operator(char p)
 71 {
 72     int n1=num.gettop();
 73     num.pop();
 74     int n2=num.gettop();
 75     num.pop();
 76     //cout<<n1<<n2<<p<<endl;
 77     switch(p)
 78     {
 79         case ‘*‘:num.push(n1*n2);break;
 80         case ‘/‘:num.push(n2/n1);break;
 81         case ‘+‘:num.push(n2+n1);break;
 82         case ‘-‘:num.push(n2-n1);break;
 83     }
 84 }
 85 int main()
 86 {
 87     init();
 88     ch.push(‘#‘);
 89     num.push(0);
 90     cin>>str;
 91     len=strlen(str);
 92     while(pos<len)
 93     {
 94         int n=0;
 95         bool flag=0;
 96         while(str[pos]<=‘9‘&&str[pos]>=‘0‘)
 97         {
 98             int ch=str[pos]-‘0‘;
 99             n=n*10+ch;
100             pos++;
101             flag=1;
102         }
103         if(flag) {num.push(n);continue;}
104         s=str[pos];
105         st=ch.gettop();
106         if((st==‘(‘&&s==‘)‘)||(st==‘#‘&&s==‘#‘)) {ch.pop();pos++;continue;}
107         if(st==‘(‘)    {ch.push(s);pos++;continue;}
108         if(sign[st]>=sign[s])    {Operator(st);ch.pop();continue;}
109         ch.push(s);
110         pos++;
111     }
112     cout<<num.gettop()<<endl;
113 }

时间: 2024-10-12 14:27:47

数据结构作业的相关文章

数据结构作业之数组

/* 编程作业 2.1 向highArray.java程序(清单2.3)的HighArray类添加一个名为getMax()的方法,它返回 数组中最大关键字的值,当数组为空时返回-1.向main()中添加一些代码来使用这个方法. 可以假设所有关键字都是正数. 2.2 修改编程作业2.1中的方法,使之不仅返回最大的关键字,而且还将该关键字从数组中删除. 将这个方法命名为removeMax(). 2.3 编程作业2.2中的removeMax()方法提供了一种通过关键字值进行数组排序的方法.实现一个 排

java程序代码代写、代写tree数据结构作业

java程序代码代写.代写tree数据结构作业实验三:java面向对象编程一.实验目的及要求1.理解 Java 语言是如何体现面向对象编程基本思想的:2.掌握类的声明以及对象的创建:3.了解类的成员变量和成员方法的特性以及类的构造方法的使用. 4.掌握类变量与实例变量以及类方法和实例方法的区别.二.实验内容1. 编写程序模拟两个村庄共同拥有一片森林.编写一个Village类,该类有一个静态的int型成员变量treeAmount用于模拟森林中树木的数量.在主类MainClass的方法中创建两个村庄

JAVA 图作业算法实现、代写Graphs 数据结构作业

JAVA 图作业算法实现.代写Graphs 数据结构作业Lab Case – Algorithms and Data Structure, 2017-2018Phase 3. GraphsCurrently, SharingCar only provides service in ten cities (Madrid, Barcelona, Valencia, Sevilla, Bilbao, Granada, Toledo, Salamanca, Alicante, Cáceres). Not

数据结构作业--图遍历

数据结构老师布置一道题目,憋了一天才搞出来,还是练习地不够啊!不过班里面其他人搞出来的也不多啊! 题目 PS:头文件是老师给的. 一.请建立一个空项目,添加GraphTraverseTest.cpp源文件和AdjMWGraph.h.AdjLWGraph.h.CreatAdjWGraph.h.AdjWGraphApp.h.SeqList.h.SeqQueue.h等六个头文件.其中: AdjMWGraph.h头文件采用邻接矩阵实现带权有向图数据结构:    AdjLWGraph.h头文件采用邻接表实

第八周数据结构作业

数据结构作业——Fresh Meat(优先队列)

Fresh Meat Description 我们故事的主角是屠夫扒鸡,起初屠夫扒鸡只是一个佣兵,他先去拜了太上老君为师,学了一技能肉钩,凭着一技肉钩驰骋决斗场,达到一段以后到阿尔伯特那里偷学了二技能肢解,这下可以连招了.后来因为太久没洗澡习得三技能腐烂.因为腐烂损人损己,扒鸡又懒得出回血装备,于是拜师蜘蛛,学了招极度饥渴,你懂的(不是字面上的意思) .现在扒鸡自定义了个 RPG 要试试水了.RPG 地图介绍:地图上一共会出现 N 只英雄,每只英雄都有自己的生命值 Hi(不管什么英雄,扒鸡都是肉

数据结构作业——sights(最短路/最近公共祖先)

sights Description 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点,由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱的小风姑娘不想走那么长的山路, 所以打算乘坐专用的交通工具. 有的景点之间有路,乘坐交通工具需要花费一定的金额.由于到达景区之前已经花了一部分钱了,现在可爱的小风姑娘站在景点 1,即根景点.按原计划她要去编号为 m 的景点,导游告诉她到景点 m 总共要花的钱(包括来之前花的钱) .然而善变的小风姑娘突然想去景点 y(直

数据结构作业——max_and_min(栈)

Description TonyY 最近喜欢上了数学,今天他研究一个只有加号和乘号,运算数为整数, 大小在 1-9 之间的表达式,你可以任意地往里加括号,如何让表达式的值最大或 者最小? Input 输入仅一行,为上述的算式,长度 n(1<=n<=200),保证算式合法. Output 输 出 添括 号 后 的 算式 最 大 值 和最 小 值 , 由于 答 案 较 大, 请 将 答 案对 870764322 求余后输出. Sample Input 1+2*3  Sample Output 97

数据结构作业——word(栈)

Description TonyY 是一个 word 小白,今天他对 word 中撤销和恢复功能特别感兴趣,玩耍了一个上午(mdzz~) ,现在他知道了它们的功能和快捷键:撤销:ctrl+z,可以撤销最近 1 次之前的恢复和 input 操作.恢复:ctrl+y,可以恢复最近 1 次之前的撤销操作,但是 input 操作之前的撤销操作不能被恢复.当然,TonyY 还要往里写东西,操作格式为 input str(长度 m 1=<m<=30) .现在他对 word 玩耍了起来,想知道玩耍完的结果,