1495 孤岛营救问题

博客详细介绍了1495号孤岛营救问题,该问题本质是一个最短路径问题。作者提到这道题目结合了历史和阅读理解,同时提供了两种解决方案:最短路算法和广度优先搜索。对于广搜方法,文章解释了如何通过层次遍历寻找最短路径。而在最短路的解法中,涉及到了边数的计算,如1>>101010=1024000。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1495 孤岛营救问题

这个题是一个历史题加阅读理解题

数学是火,点亮物理的灯。物理是灯,照亮化学的路。化学是路,通向生物的坑。生物是坑,埋葬了理科生,

很明显是一个最短路径的问题,好模板,要是开始也能遇见这么模板的题就好了
然后就是这个题可以用两种做法,一个是最短路版本,一个广度优先搜索版本

广搜

广搜,这个版做法其实就是把每个状态的钥匙进行分层,然后根据状态进行搜索最短路径

#include<bits/stdc++.h>
using namespace std;
const int N = 12;
int dir[5][3]={
   
   {
   
   0,1},{
   
   1,0},{
   
   0,-1},{
   
   -1,0}};//方位数组
int e[N][N][N][N],key[N][N][N],dkey[N][N];
int vis[N][N][1<<14];
int n,m;
struct node{
   
   
	int x,y,k,d;
	node(){
   
   }
	node(int x,int y,int k,int d):x(x),y(y),k(k),d(d){
   
   }
};
int getkey(int x,int y){
   
   
	int ans = 0;
	for(int i=1;i<=dkey[x][y];i++)
	ans|=(1<<(key[x][y][i]-1));//计算钥匙和
	return ans;
}
int bfs(){
   
   
	queue<node> q;
	int sk = getkey(1,1);
	q.push(node(1,1,sk,0)),vis[1][1][sk] = 1;
	while(q.size()){
   
   
		node u = q.front();q.pop();
		if(u.x==n && u.y==m) return u.d;
		int ux = u.x,uy = u.y;
		for(int i=0;i<4;i++){
   
   
			int nx = ux+dir[i][0];
			int ny = uy+dir[i][1];
			int opt = e[ux][uy][nx][ny]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值