当前位置: 首页 > news >正文

DFS入门刷题

目录

P1683 入门

P1596 [USACO10OCT] Lake Counting S

1114. 棋盘问题

P1025 [NOIP 2001 提高组] 数的划分


P1683 入门

#include <iostream>
using namespace std;
char a[30][30];
bool vis[30][30];
int res = 1;
int n, m;
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, 1, -1};
void dfs(int x, int y)
{for (int i = 0; i < 4; i++){int nx = x + dx[i];int ny = y + dy[i];if (nx >= 1 && ny >= 1 && nx <= n && ny <= m && a[nx][ny] != '#' && !vis[nx][ny]){vis[nx][ny] = true;res++;dfs(nx, ny);}}
}
int main()
{cin >> m >> n;int x, y;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> a[i][j];if (a[i][j] == '@'){x = i;y = j;vis[i][j] = true;}}}dfs(x, y);cout << res;return 0;
}

P1596 [USACO10OCT] Lake Counting S

#include <iostream>
using namespace std;
char a[105][105];
int n, m;
int res;
bool vis[105][105];
int dx[] = {1, -1, 0, 0, 1, -1, 1, -1};
int dy[] = {0, 0, -1, 1, -1, 1, 1, -1};
void dfs(int x, int y)
{for (int i = 0; i < 8; i++){int nx = x + dx[i];int ny = y + dy[i];if (nx >= 1 && ny >= 1 && nx <= n && ny <= m && a[nx][ny] == 'W' && !vis[nx][ny]){vis[nx][ny] = true;dfs(nx, ny);}}
}
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> a[i][j];}}for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){if (a[i][j] == 'W' && !vis[i][j]){res++;dfs(i, j);}}}cout << res;return 0;
}

1114. 棋盘问题

#include <iostream>
using namespace std;
int n, k;
bool vis[10];
char a[10][10];
int res;
void dfs(int x, int count)
{if (k == count){res++;return;}if (x > n){return;}for (int i = 1; i <= n; i++){if (!vis[i] && a[x][i] == '#'){vis[i] = true;dfs(x + 1, count + 1);vis[i] = false;}}dfs(x + 1, count); // 强行访问
}
int main()
{while (cin >> n >> k, n > 0 && k > 0){for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cin >> a[i][j];}}res = 0;dfs(1, 0);cout << res << "\n";}return 0;
}

P1025 [NOIP 2001 提高组] 数的划分

#include <iostream>
using namespace std;
int n, k;
int res;
int a[10];
void dfs(int x, int sum, int start)
{if (sum > n){return;}if (x > k){if (sum == n){res++;}return;}for (int i = start; sum + (k - x + 1) * i <= n; i++){a[x] = i;dfs(x + 1, sum + i, i);a[x] = 0;}
}
int main()
{cin >> n >> k;dfs(1, 0, 1);cout << res;return 0;
}

相关文章:

  • OD 算法题 B卷【模拟消息队列】
  • Arm处理器调试采用jlink硬件调试器的命令使用大全
  • 人工智能在智能供应链中的创新应用与未来趋势
  • 2024年ESWA SCI1区TOP,自适应学习灰狼算法ALGWO+无线传感器网络覆盖优化,深度解析+性能实测
  • 开源版 PyMOL 如何绘制 Galidesivir 分子结构 ?
  • 项目:贪吃蛇实现
  • 流媒体协议分析:流媒体传输的基石
  • Jinja2 模板继承机制
  • Mybatis ORM SpringORM
  • 【代码坏味道】膨胀类 Bloaters
  • Go语言的context
  • 《高等数学》(同济大学·第7版) 第一节《映射与函数》超详细解析
  • 【算法】递归与分治策略
  • Cesium快速入门到精通系列教程一
  • 【Linux】进程地址空间揭秘(初步认识)
  • 【计算机网络】 ARP协议和DNS协议
  • 计算机网络物理层基础练习
  • 【CC协议】知识共享许可协议(Creative Commons Licenses)体系解析
  • Python 中Vector类的格式化实现,重点拆解其超球面坐标系的设计精髓
  • 15分钟讲解所有较知名编程语言
  • 动易网站怎么进入后台/深圳百度首页优化
  • 做网站布局的时候需要把导航复制到每个页面吗/在哪里可以发布自己的广告
  • 网站的一般制作流程/seo排名推广
  • 哈尔滨网站建设工作室/seo搜索引擎优化推广
  • 做网站就/app拉新推广赚佣金
  • 网站商城建设多少钱/seo算法优化