【基本要求】 首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三
发布网友
发布时间:2023-04-10 12:19
我来回答
共3个回答
热心网友
时间:2023-09-15 04:29
#include <iostream>
#define MazeSize 30
using namespace std;
struct Seat
{
int x;//横坐标
int y;//纵坐标
};
struct MazeStack
{
int base; //栈底
int top; //栈顶
Seat Axis[100]; //数组
};
class Maze
{
private:
MazeStack Ms; //构建迷宫存储栈
int Zy[5]; //存储下一步X坐标的变化
int Zx[5]; //存储下一步Y坐标的变化
public:
static int num;
bool Map[MazeSize][MazeSize];//迷宫地图数组
Seat start; //出口
Seat end; //入口
void CreatMaze(int,int); //构建迷宫
void InitStack( ); //初始化迷宫存储栈
void Input( ); //输入下一步坐标变化数组
void Push(Seat); //入栈
void Deleted(Seat &); //提取栈顶元素
int Search(Seat); //搜索路径
void show(MazeStack);//输出路径
};
int Maze::num=0;
/*构建迷宫*/
void Maze::CreatMaze(int m,int n)
{
cout<<"请输入相应的迷宫地图(0代表障碍物,1代表通道块):"<<endl;
for(int i=0;i<=m+1;i++)
for(int j=0;j<=n+1;j++)
if(i==0||j==0||i==m+1||j==n+1)
Map[i][j]=false; //例如一个迷宫本应该是3*3的.但是,为了后面的方便在构造时,将它构造为5*5的矩阵.新增的迷宫块的值为0,即为障碍物
else
cin>>Map[i][j]; //迷宫矩阵
}
/*初始化栈*/
void Maze::InitStack( )
{
Ms.base=0;
Ms.top=0;
}
/*入栈*/
void Maze::Push(Seat k)
{
Ms.Axis[Ms.top].x=k.x;
Ms.Axis[Ms.top].y=k.y;
++Ms.top;
}
/*输出路径*/
void Maze::show(MazeStack s)
{
cout<<"第"<<++num<<"条通路为:"<<endl;
while(s.top>s.base+1)
{
cout<<"("<<s.Axis[s.base].x<<","<<s.Axis[s.base].y<<")"<<"-->";
++s.base;
}
cout<<"("<<s.Axis[s.base].x<<","<<s.Axis[s.base].y<<")"<<endl;
}
/*输入方向矩阵*/
void Maze::Input( )
{
Zx[0]=0;
Zx[1]=0;
Zx[2]=1;
Zx[3]=0;
Zx[4]=-1;
Zy[0]=0;
Zy[1]=1;
Zy[2]=0;
Zy[3]=-1;
Zy[4]=0;
}
/*提取栈顶元素*/
void Maze::Deleted(Seat &e)
{
--Ms.top;
e.x=Ms.Axis[Ms.top-1].x;
e.y=Ms.Axis[Ms.top-1].y;
}
/*搜索路径*/
int Maze::Search(Seat a)
{
if(a.x==end.x&&a.y==end.y) //如果遇到出口,就输出路径并返回.
{
show(Ms);
return 0;
}
else
{
for(int i=1;i<=4;i++)
{
int X=a.x+Zx[i]; //下一个被测试的迷宫块的横坐标
int Y=a.y+Zy[i];
if(Map[X][Y]) //迷宫块为通道块
{
a.x=X;
a.y=Y;
Push(a);
Map[X][Y]=false;
Search(a);
Map[X][Y]=true;
Deleted(a);
}
}
}
return 0;
}
/*开始运行*/
void Run( )
{
int m,n;
cout<<"请输入迷宫的行:";
cin>>m;
cout<<"请输入迷宫的列:";
cin>>n;
Maze M;
M.CreatMaze(m,n);
M.InitStack( );
M.Input( );
cout<<"请输入入口坐标:"<<endl;
cin>>M.start.x>>M.start.y;
while(!M.Map[M.start.x][M.start.y])
{
cout<<"入口必须为通道块,请重新输入入口坐标:"<<endl;
cin>>M.start.x>>M.start.y;
}
cout<<"请输入出口坐标:"<<endl;
cin>>M.end.x>>M.end.y;
while(!M.Map[M.end.x][M.end.y])
{
cout<<"出口坐标必须为通道块,请重新输入出口坐标:"<<endl;
cin>>M.end.x>>M.end.y;
}
M.Push(M.start);
M.Map[M.start.x][M.start.y]=false;
M.Search(M.start);
if(M.num==0)
cout<<"该迷宫没有出路!"<<endl;
}
void main( )
{
cout<<"........................................................."<<endl;
cout<<" 迷宫的长与宽都不能超过30"<<endl;
cout<<"........................................................."<<endl;
Run( );
}
热心网友
时间:2023-09-15 04:29
Try thi9s one, should be fine.
select *
from tcf_abc where name in (
select name
from tcf_abc t1
where perserve = 'new'
and exists(select 1 from tcf_abc where name = t1.name and perserve = 'old'and t1.number/number = 30))
DB2测试通过
NAME NUMBER PERSERVE
aa 90 new
aa 3 old
cc 60 new
cc 2 old
热心网友
时间:2023-09-15 04:30
你是女院的么,乐死我了,哈哈追问嗯啊嗯啊。。。。我纠结于各种版本,自己也写了个。。。但是还是有地方不对。。。。