5611: 【J1】【搜索】网格寻路

03-25 1809阅读 0评论

题目描述

给你一个 n * m 的网格,其中每个单元格不是 0(空)就是 1(障碍物)。每一步,您都可以在空白单元格中上、下、左、右移动。

5611: 【J1】【搜索】网格寻路,5611: 【J1】【搜索】网格寻路,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,第1张
(图片来源网络,侵删)

如果您最多可以消除 k 个障碍物,请找出从左上角 (1, 1) 到右下角 (n, m) 的最短路径,并返回通过该路径所需的步数。如果找不到这样的路径,则返回 -1 。

输入

第一行,两个整数n,m

接下来的n行,每行输入一个整数0或1

第n+2行一个整数k,表示最多可以消除的障碍物数目

输出

输出从起点到终点的最短路程,如果不存在从起点到终点的路,则输出-1。

样例输入

5 3
0 0 0
1 1 0
0 0 0
0 1 1
0 0 0
1

样例输出

6

Code:

#include
using namespace std;
struct node{
	int x,y,s,rk;
};
int n,m,a[55][55],k;
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
bool vis[55][55][100];
int bfs(){
	queueq;
	node sp={1,1,0,k};
	q.push(sp);
	while(!q.empty()){
		node p=q.front();
		q.pop();
		if(p.x==n&&p.y==m){
			return p.s;
		}
		for(int i=0;i=1&&ty>=1&&tx=1&&ty>=1&&txn>>m;
    for(int i=1;ia[i][j];
		}
	}
	cin>>k;
	k=min(k,n+m-3);
	vis[1][1][k]=1;
	cout
免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1809人围观)

还没有评论,来说两句吧...

目录[+]