PoJ1979 Red and Black (DFS)

本文分析了POJ 1979题目的解题思路,利用深度优先搜索(DFS)算法,从起始位置出发,遍历所有可达的黑色砖块,统计可达砖块数量。代码实现简洁,易于理解。

题目链接:http://poj.org/problem?id=1979

题意:

  有一个由正方形的黑色砖块和红色砖块组成的矩形广场,一个人站在广场上的某处,他可以选择往四周(上下左右)的黑色砖块上走,问他一共可以走多少个砖块(加上他本身站立的砖块).

  "."为黑色砖块

  "#"为红色砖块

  "@"为人的起始位置

思路:

  利用DFS 从人的起始位置开始搜索,搜索的过程中直接统计砖块的数量就好。

代码:

 1 #include <iostream>
 2 #include <cmath>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cstdlib>
 6 #include <stack>
 7 #include <queue>
 8 #include <algorithm>
 9 #include <string>
10 
11 typedef long long LL;
12 using namespace std;
13 const double PI = acos(-1);
14 const int MAXN = 20;
15 int visit[MAXN + 3][MAXN + 3];//标记数组
16 char map[MAXN + 3][MAXN + 3];
17 int stepX[] = {-1, 0, 0, 1};
18 int stepY[] = {0, -1, 1, 0};
19 int cnt;
20 
21 void DFS(int x, int y) {
22     visit[x][y] = 1;
23     for(int i = 0; i < 4; i++) {
24         int tx = x + stepX[i], ty = y + stepY[i];
25         if(tx >=0 && ty >= 0 && !visit[tx][ty] && map[tx][ty] == '.'){
26             cnt++; //计数
27             visit[tx][ty] = 1;
28             DFS(tx, ty);
29         }
30     }
31 }
32 
33 int main() {
34     //freopen("input", "r", stdin);
35     int m = -1, h = -1;
36     while(scanf("%d%d", &m, &h), m || h) {
37         memset(visit, 0, sizeof(visit));
38         memset(map, 0, sizeof(map));
39         for(int i = 0; i < h; i++) scanf("%s", map[i]);
40         int stX = -1, stY = -1; //起始坐标
41         for(int i = 0; i < h; i++) {
42             for(int j = 0; j < m; j++) {
43                 if(map[i][j]== '@') stX = i, stY = j; 
44             }
45         }
46         cnt = 1;
47         DFS(stX, stY);//从起始坐标开始搜索
48         printf("%d\n", cnt);
49     }
50     return 0;
51 }

 

转载于:https://www.cnblogs.com/Ash-ly/p/5710597.html

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值