#include<bits/stdc++.h>
const int maxn=1e5+5;
typedef long long ll;
using namespace std;
int n,m,d;
struct node
{
int x,y;
int step;
int left;
};
char Map[105][105];
int vis[105][105][105];
int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
bool check(int x,int y)
{
if(x>=0&&x<m&&y>=0&&y<n)
{
return true;
}
else
{
return false;
}
}
int BFS(int x,int y )
{
node start ;
start.x=x;
start.y=y;
vis[x][y][d]=1;
start.step=0;
start.left=d;
queue<node>q;
q.push(start);
while(!q.empty())
{
node now;
now =q.front();
q.pop();
if(now.x==m-1&&now.y==n-1)
{
return now.step;
}
for(int t=0;t<4;t++)
{
node next;
next.x=now.x+dir[t][0];
next.y=now.y+dir[t][1];
next.step=now.step+1;
next.left=now.left;
if(check(next.x,next.y)&&vis[next.x][next.y][next.left]==0&&Map[next.x][next.y]=='P')
{
vis[next.x][next.y][next.left]=1;
q.push(next);
}
}
for(int t=2;t<=d;t++)
{
node next;
next.x=now.x+0;
next.y=now.y+t;
next.step=now.step+1;
next.left=now.left-t;
if(check(next.x,next.y)&&vis[next.x][next.y][next.left]==0&&Map[next.x][next.y]=='P'&&next.left>=0)
{
vis[next.x][next.y][next.left]=1;
q.push(next);
}
next.x=now.x+t;
next.y=now.y+0;
next.step=now.step+1;
next.left=now.left-t;
if(check(next.x,next.y)&&vis[next.x][next.y][next.left]==0&&Map[next.x][next.y]=='P'&&next.left>=0)
{
vis[next.x][next.y][next.left]=1;
q.push(next);
}
next.x=now.x+0;
next.y=now.y-t;
next.step=now.step+1;
next.left=now.left-t;
if(check(next.x,next.y)&&vis[next.x][next.y][next.left]==0&&Map[next.x][next.y]=='P'&&next.left>=0)
{
vis[next.x][next.y][next.left]=1;
q.push(next);
}
next.x=now.x-t;
next.y=now.y+0;
next.step=now.step+1;
next.left=now.left-t;
if(check(next.x,next.y)&&vis[next.x][next.y][next.left]==0&&Map[next.x][next.y]=='P'&&next.left>=0)
{
vis[next.x][next.y][next.left]=1;
q.push(next);
}
}
}
return 0;
}
int main()
{
cin>>m>>n>>d;
memset(vis,0,sizeof(vis));
for(int t=0;t<m;t++)
{
scanf("%s",Map[t]);
}
int ans=BFS(0,0);
if(!ans)
{
cout<<"impossible"<<endl;
return 0;
}
cout<<ans<<endl;
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
60个c++的作业程序
共60个文件
cpp:60个
需积分: 17 0 下载量 64 浏览量
2022-03-26
08:22:34
上传
评论
收藏 18KB RAR 举报
温馨提示
这是我从九百多个c++作业程序里精心挑选的60个程序,包含了许多类型,专门拯救那些c++作业不会的同学。
资源详情
资源评论
资源推荐
收起资源包目录
c++作业.rar (60个子文件)
c++作业
采药.cpp 411B
【基础】亲密数对.cpp 553B
级数求和.cpp 219B
喜加加客栈1.cpp 188B
飞越原野.cpp 3KB
神枪手3-弹无虚发.cpp 509B
地图涂色.cpp 493B
棒鸡虫包.cpp 354B
开心的金明.cpp 420B
喜加加客栈2.cpp 210B
十字方阵.cpp 530B
【基础】爬楼梯.cpp 419B
【基础】美丽的黄山.cpp 290B
包装箱型号.cpp 143B
【入门】掌柜你好.cpp 284B
【基础】聪明的海宝.cpp 221B
神枪手1-有的放矢.cpp 523B
双进制回文数.cpp 377B
报数游戏.cpp 278B
二进制转十进制.cpp 192B
【USACO】谷仓的安保.cpp 694B
喝醉的狱卒.cpp 123B
【入门】判断质数.cpp 372B
神枪手2-左右开弓.cpp 395B
庄园寻宝.cpp 283B
【入门】下载记忆.cpp 186B
寻找完美数.cpp 384B
质因子.cpp 240B
【NOIP98普及组】2的幂次方.cpp 518B
统计二码.cpp 210B
【基础】小青蛙回来了.cpp 240B
【入门】夏令营小旗手.cpp 151B
orthography.cpp 260B
百米跑成绩.cpp 262B
泡泡龙.cpp 941B
水仙花数.cpp 229B
寻找雷劈数.cpp 208B
【入门】角谷猜想.cpp 223B
【基础】约瑟夫问题.cpp 466B
【入门】百钱百鸡问题.cpp 283B
【入门】调尾巴数.cpp 259B
哥德巴赫猜想.cpp 329B
【入门】掌柜再见.cpp 278B
抓住那头牛.cpp 630B
【入门】奇数?偶数?.cpp 187B
【提高】扫雷游戏.cpp 424B
化简大法.cpp 368B
产生数.cpp 1KB
【基础】精挑细选.cpp 330B
烤面包.cpp 172B
f行列转换.cpp 352B
最小公倍数.cpp 249B
【入门】纯粹合数.cpp 497B
判断闰年.cpp 195B
【基础】牛的速记.cpp 486B
【入门】挛生素数.cpp 438B
包场看电影.cpp 456B
真约数和.cpp 196B
骑士牛.cpp 864B
连通块.cpp 786B
共 60 条
- 1
ciciio橙子
- 粉丝: 37
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0