首页 > 其他分享 >【DFS】飞行员兄弟

【DFS】飞行员兄弟

时间:2023-02-13 20:00:27浏览次数:47  
标签:递归 兄弟 int DFS item printf 飞行员 include

image

导读 ^ _ ^

搜索问题本质是递归问题。
在递归的过程中,进行决策选择。
今天讲解一下飞行员兄弟这道简单深搜题。

飞行员兄弟

image.png

算法思路

看到这个问题,数据范围这么小,毫无疑问,用递归暴力搜索。
从上往下,从左往右,对于每个格子,要么动,要么不动。
棘手问题,要保留步骤,那么可以在更新最小值的时候,进行一个备份。

代码实现

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef pair<int,int> PII;

int N = 0x3f3f3f3f;
char a[6][6];
vector<PII> q;//单层逻辑
vector<PII> q2;//备份

//检查是否到达目标状态
bool check( ) {
	for (int i = 1; i <= 4; i++)
	  for (int j = 1; j <= 4; j++)
	     if (a[i][j] != '-') return false;
	
	return true;
}
//改变状态
void change(int x,int y) {
	if (a[x][y] == '-') a[x][y] = '+';
	else a[x][y] = '-';
}
//递归搜索
void dfs(int x, int y, int count)
{
	if( y == 5) x = x + 1,y = 1; //注意,行到这里才会动一下
	if(check()) {
		N = min(N,count);
		if(N == count) q2 = q;
		return;
	}
	if( x == 5) return;
	if (count >= N) return;

    //动
	for(int i = 1; i <= 4; i++) 
	     change(i,y),change(x,i);
	change(x,y);
	
	q.push_back({x,y});
	dfs(x, y+1,count + 1);
	q.pop_back( );//回溯

    //不动
	for(int i = 1; i <= 4; i++) 
	     change(i,y),change(x,i);
	change(x,y);
	
	dfs(x, y+1,count);
	
}

int main( )
{
	for (int i = 1; i <= 4; i++)
	 for (int j = 1; j <= 4; j++)
	    cin >> a[i][j]; //空格不会读
	
	dfs(1,1,0);
	
	printf("%d\n",N);
	for(auto item : q2) //输出步骤
	  printf ("%d %d\n",item.first,item.second);
	return 0;
}

#谢谢你的观看!

^ _ ^

标签:递归,兄弟,int,DFS,item,printf,飞行员,include
From: https://www.cnblogs.com/HX-Note/p/17117619.html

相关文章

  • 【DFS】LeetCode 108. 将有序数组转换为二叉搜索树
    题目链接108.将有序数组转换为二叉搜索树思路类似于二分搜索,定位到数组中间mid,然后左边的子数组构成左子树,右边的子数组构成右子树,mid处的数字构成根结点。递归构建......
  • 【DFS】LeetCode 669. 修剪二叉搜索树
    题目链接669.修剪二叉搜索树思路若root.val小于边界值low,则root的左子树必然均小于边界值,我们递归处理root.right即可;若root.val大于边界值high,则root的......
  • 【DFS】LeetCode 98. 验证二叉搜索树
    题目链接98.验证二叉搜索树思路依据BST的定义:左子树的结点都比根结点小,右子树的结点都比根结点大。我们在递归过程中传递根节点的值,判断当前结点值与根结点值的大小......
  • 图论算法讲义(一)$\Rightarrow$ DFS
    1.在图上$dfs$从本质上来说在图上$dfs$和直接使用搜索其实本质是一样的$DFS$中文名是深度优先搜索,是一种用于遍历或搜索树或图的算法。所谓深度优先,就是说每次都尝试向......
  • LeetCode全排列AcWing842. 排列数字(/dfs)
    原题解Acwing同一个题,主要参考写法题目给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。约束题解classSolution{publi......
  • 好客租房52-通讯的三种方式(兄弟组件的传递)
    共享状态提升到最近的公共父组件中由公共父组件管理这个状态状态提升提供共享状态或者操作状态的方法//导入reactimportReactfrom'react'importReactDOMfrom'react......
  • 浅析 SeaweedFS 与 JuiceFS 架构异同
    SeaweedFS是一款高效的分布式文件存储系统,最早的设计原型参考了Facebook的Haystack,具有快速读写小数据块的能力。本文将通过对比SeaweedFS与JuiceFS在设计与功能上......
  • DFS专题1
    例题一39.组合总和给你一个无重复元素的整数数组 candidates和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target的所有 不同组合,并以列......
  • POJ--3009 Curling 2.0(DFS+减枝)
    记录23:412023-2-8http://poj.org/problem?id=3009reference:《挑战程序设计竞赛(第2版)》第二章练习题索引p135DescriptionOnPlanetMM-21,aftertheirOlympic......
  • 【CCCC】L3-014 周游世界 (30分),,DFS搜索最短路,路径打印
    problemL3-014周游世界(30分)周游世界是件浪漫事,但规划旅行路线就不一定了……全世界有成千上万条航线、铁路线、大巴线,令人眼花缭乱。所以旅行社会选择部分运输公司组......