问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据结构与算法,C/C++ Rescue the princess(拯救公主)

发布网友 发布时间:2022-09-29 23:24

我来回答

4个回答

热心网友 时间:2024-12-04 18:20

#include <iostream>
#include <vector>
#define MAX 100
using namespace std;
struct stack{
int iway,jway;
int direction;
};

stack q[MAX];
int top;

char **arg;//城堡地图指针
char **Mark;//城堡地图mark指针

int FindPrincess(int m,int n,int xW,int yW,int xP,int yP)//找到公主
{
vector<int> ivec;
top=0;
int count=0;//计算找到公主的路径总数
int time=0,MinTime=0;//找到公主所花时间
q[top].iway=xW;
q[top].jway=yW;
q[top].direction=-1;
arg[xW][yW]='s';//'s'标记走过的位置
int i,j,di,find;
while(top>-1)
{
i=q[top].iway;
j=q[top].jway;
di=q[top].direction;
if(i==xP&&j==yP)
{
count++;
for(int val=1;val<top+1;val++)
{
if(Mark[q[val].iway][q[val].jway]=='.'||Mark[q[val].iway][q[val].jway]=='a')
time=time+1;
else if(Mark[q[val].iway][q[val].jway]=='x')
time=time+2;
}
ivec.push_back(time);
if(ivec.size()==1)
{
MinTime=ivec[0];
}
if(ivec.size()>=2)
{
if(ivec[ivec.size()-1]<MinTime)
MinTime=ivec[ivec.size()-1];
}
arg[q[top].iway][q[top].jway]=Mark[q[top].iway][q[top].jway];
top--;
i=q[top].iway;
j=q[top].jway;
di=q[top].direction;
time=0;
}
find=0;
while(find==0&&di<4)
{
di++;
if(di==0&&i==m-1)
di++;
if(di==1&&j==0)
di++;
if(di==2&&i==0)
di++;
if(di==3&&j==n-1)
di++;
switch(di)
{
case(0):i=q[top].iway+1;
j=q[top].jway;
break;
case(1):i=q[top].iway;
j=q[top].jway-1;
break;
case(2):i=q[top].iway-1;
j=q[top].jway;
break;
case(3):i=q[top].iway;
j=q[top].jway+1;
break;
}
if(arg[i][j]=='.'||arg[i][j]=='a'||arg[i][j]=='x')
{
find=1;
}

}
if(find==1)
{
q[top].direction=di;
top++;
q[top].iway=i;
q[top].jway=j;
q[top].direction=-1;
arg[i][j]='s';
}
else
{
arg[q[top].iway][q[top].jway]=Mark[q[top].iway][q[top].jway];
top--;
}
}
if(count==0)
return -1;
else
return MinTime;
}

int main()
{
int m,n;//地图行数与列数
int xWarrior,yWarrior;//勇士坐标
int xPrincess,yPrincess;//公主坐标
int Min;
char **map;
cout<<"请输入城堡N,M(用空格隔开):";
cin>>m>>n;
//y=n;
cout<<"请输入城堡地图:"<<endl;
map=new char* [m];
Mark=new char* [m+2];
for(int i=0;i<m;++i)
{
map[i]=new char[n];
Mark[i]=new char[n+2];
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>map[i][j];
Mark[i][j]=map[i][j];
if(map[i][j]=='r'||map[i][j]=='R')
{
xWarrior=i;
yWarrior=j;
}
if(map[i][j]=='a'||map[i][j]=='A')
{
xPrincess=i;
yPrincess=j;
}
}
}
arg=map;
Min=FindPrincess(m,n,xWarrior,yWarrior,xPrincess,yPrincess);
cout<<Min;
delete[]Mark;
delete[]map;
return 0;
}
满意请采纳哦!不懂可以问!

热心网友 时间:2024-12-04 18:20

应该是一道类似“迷宫游戏”的数据结构与算法的题目。可以翻译为:
试验任务:
构造一个N行M列的迷宫(可用二维数组表示),并求解:走出迷宫的最短路径(也就是题目中的最短时间,或者叫最短步数)。(勇士r即为迷宫起点,公主a为迷宫终点,在前进过程中,如果遇到怪物x,则步数额外加一)。

热心网友 时间:2024-12-04 18:21

这就是传说中的数据结构---图,以及算法---深度优先。

热心网友 时间:2024-12-04 18:21

学习中。。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我想下个好点的股市行情软件,光大证券金阳光app怎么样啊? 股票行情软件下载选哪个比较好?光大证券的金阳光app怎么样? 光大证券开户APP是什么 光大用什么炒股软件 家里房顶漏水怎么办 房顶漏水最好补漏方法 中石化薪资揭秘(天津、海南、镇海、中科、茂名) 专科生在茂名石化待遇怎样 茂名石化正式工待遇怎么样 茂名石化待遇如何 729-08胶皮是内能的吗 全时四驱与前置四驱哪个更好! 前置四驱和全时四驱的区别哪个比较好 想问前置四驱和全时四驱的区别是什么 ...甘油三酯1.92 高密度脂蛋白1.1低密度脂蛋白4.02 极低密度胆固醇0.87... 深圳北大青鸟分享初学者适合学习哪些编程语言? 怎样可以在步步高下载手机百度 步步高vivo手机助手怎么下载进入手机 怎么查看自己手机被定位 阿胶能保存多久 阿胶的保存方法 请问一下前置四驱和全时四驱的区别是什么 如何在两部手机同时登陆一个? 如何在两部手机同时登陆一个? 前置四驱和全时四驱的区别是什么 如何在两部手机同时登陆一个? 同一个怎么在两个手机同时在线 阿胶怎么保存最好 保存阿胶的方法 上海长海医院核酸检测多久出结果,上海健康云核酸检测多久出结果 四十二度的酒能杀死病毒吗 如何评价威少这赛季的三双壮举 如何看待威少赛季42次三双 数据结构: 简述一下算法的功能 Status algo2(Stack S,int e) {Stac 人生最值得的是什么? 怎么保持好自己精神状态 《怀念母亲》读后有感心得 《怀念母亲》的作者是我国当代著名学者季羡林写的。修改病句 鸭胸肉简单好吃的做法 鸭胸肉制作方法 鸭胸肉的做法 英语学习中应当如何记忆单词? 最好的wifi万能钥匙显示密码版下载网址给我 窗户上面玻璃看不见东西的是什么玻璃 关于MDR软件的求助 海藻用于中药有什么作用 随着电影时代的白热化,好看的特工间谍电影有不少,大家有什么推荐的吗... 推荐几部像《碟中谍》系列一样好看的特工电影? 有哪些和《碟中谍》类似的这种电影? 推荐几部谍战片,类似于碟中谍和谍影重重的。 我不要复制粘贴的... 教你如何挑选合适新娘结婚手链 生产销售商重复侵权的,专利侵权赔偿额怎么计算 如何应对知识产权重复侵权行为 梦见出殡队伍穿白衣