【HDU1198】Farm Irrigation(回溯+记忆化搜索)

数据流小,深搜即可。有些暴力。看其他人的题解用二维转换成一维做的并查集很巧妙,马上去研究一下!!

 

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <cctype>
 7 #include <algorithm>
 8 #include <numeric>
 9 #include <string>
10 #include <limits.h>
11 #include <map>
12 using namespace std;
13 
14 int m, n, ans = 0;
15 char Map[55][55];
16 bool vis[55][55];
17 map<char, string> check;
18 
19 void dfs (int x, int y) {
20 
21     vis[x][y] = 1;
22 
23     if (check[Map[x][y]].find("U") != -1 && check[Map[x - 1][y]].find("D") != -1) {
24         if (!vis[x - 1][y]) dfs (x - 1, y);
25     }
26 
27     if (check[Map[x][y]].find("D") != -1 && check[Map[x + 1][y]].find("U") != -1) {
28         if (!vis[x + 1][y]) dfs (x + 1, y);
29     }
30 
31     if (check[Map[x][y]].find("L") != -1 && check[Map[x][y - 1]].find("R") != -1) {
32         if (!vis[x][y - 1]) dfs (x, y - 1);
33     }
34 
35     if (check[Map[x][y]].find("R") != -1 && check[Map[x][y + 1]].find("L") != -1) {
36         if (!vis[x][y + 1]) dfs (x, y + 1);
37     }
38 }
39 
40 int main () {
41 
42     check['A'] = "UL";  check['B'] = "UR";  check['C'] = "DL";
43     check['D'] = "DR";  check['E'] = "UD";  check['F'] = "LR";
44     check['G'] = "ULR"; check['H'] = "UDL"; check['I'] = "DLR";
45     check['J'] = "UDR"; check['K'] = "UDLR";
46 
47     while (~scanf("%d%d", &m, &n)) {
48         if (m < 0 && n < 0) {
49             break;
50         }
51         memset (vis, 0, sizeof(vis));
52         memset (Map, 0, sizeof(Map));
53         for (int i = 0; i < m ; ++ i) {
54             for (int j = 0 ; j < n; ++ j) {
55                 cin >> Map[i][j];
56             }
57         }
58         ans = 0;
59         for (int i = 0; i < m; ++ i) {
60             for (int j = 0; j < n; ++j) {
61                 if (vis[i][j] != 1) {
62                     dfs (i, j);
63                     ans ++;
64                 }
65             }
66         }
67 
68         cout << ans << endl;
69     }
70     return 0;
71 }

 

转载于:https://www.cnblogs.com/Destiny-Gem/p/3869648.html

分数阶傅里叶变换(Fractional Fourier Transform, FRFT)是对传统傅里叶变换的拓展,它通过非整数阶的变换方式,能够更有效地处理非线性信号以及涉及时频局部化的问题。在信号处理领域,FRFT尤其适用于分析非平稳信号,例如在雷达、声纳和通信系统中,对线性调频(Linear Frequency Modulation, LFM)信号的分析具有显著优势。LFM信号是一种频率随时间线性变化的信号,因其具有宽频带和良好的时频分辨率,被广泛应用于雷达和通信系统。FRFT能够更精准地捕捉LFM信号的时间和频率信息,相比普通傅里叶变换,其性能更为出色。 MATLAB是一种强大的数值计算和科学计算工具,拥有丰富的函数库和用户友好的界面。在MATLAB中实现FRFT,通常需要编写自定义函数或利用信号处理工具箱中的相关函数。例如,一个名为“frft”的文件可能是用于执行分数阶傅里叶变换的MATLAB脚本或函数,并展示其在信号处理中的应用。FRFT的正确性验证通常通过对比变换前后信号的特性来完成,比如评估信号的重构质量、信噪比等。具体而言,可以通过计算原始信号与经过FRFT处理后的信号之间的相似度,或者对比LFM信号的关键参数(如初始频率、扫频率和持续时间)是否在变换后得到准确恢复。 在MATLAB代码实现中,通常包含以下步骤:首先,生成LFM信号模型,设定其初始频率、扫频率、持续时间和采样率等参数;其次,利用自定义的frft函数对LFM信号进行分数阶傅里叶变换;接着,使用MATLAB的可视化工具(如plot或imagesc)展示原始信号的时域和频域表示,以及FRFT后的结果,以便直观对比;最后,通过计算均方误差、峰值信噪比等指标来评估FRFT的性能。深入理解FRFT的数学原理并结合MATLAB编程技巧,可以实现对LFM信号的有效分析和处理。这个代码示例不仅展示了理论知识在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值