逃离迷宫(DFS/BFS)|HDU1728

逃离迷宫

HDU1728

BFS做法

  • 这道题目跟以往的最短路不同,其核心是利用BFS由近及远的特点求出到达目标点的最少拐弯数。
  • 如何求出最少的拐弯数?最少拐弯数即意味着,从起点到目标点的路径要尽量直来直往即在某点选定任意方向后始终沿该方向行走直到不可走
for(int i = 0;i < 4;i++){
   
	int nx = x + dx[i], ny = y + dy[i];
	while(judge(nx,ny)){
   // 始终沿着一个方向走
		if(!vis[nx][ny]){
   
			...
		}
		nx += dx[i];
		ny += dy[i];
	}
}

一开始写的时候把上面的代码写错了,没有搜索全部的状态
错误代码

for(int i = 0;i < 4;i++){
   
	int nx = x + dx[i], ny = y + dy[i];
	while(judge(nx,ny)){
   // 这样写遇到已经搜索过的就会停止直走,是错误的。
		if(!vis[nx][ny]){
   
			...
			nx += dx[i];
			ny += dy[i];
		}
	}
}

AC码

#include <iostream>
#include<queue>
using namespace std;

struct Node {
   
	int x, y;
	char d;// 位于该节点的朝向
	Node(int a = 0, int b = 0, char c = '/') {
   
		x = a, y = b, d = c;
	}
};

char maze[105][105];
int record[105][105];
int vis[105][105];
int dx[] = {
    0,-1,0,1 };
int dy[] = {
    -1,0,1,0 };
int k, sx, sy, gx, gy, m, n;

void bfs() 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值