NY之行-1.简单生活

### 计算110棋盘中连通棋子数量的算法 #### 使用深度优先搜索(DFS) 可以通过深度优先搜索(DFS)遍历整个棋盘,标记已经访问过的棋子,并统计连通区域的数量。这种方法简单直观,适合处理此类问题。 ```c #include <stdio.h> #include <stdbool.h> #define SIZE 10 // 定义棋盘大小为10x10 // 方向数组,用于表示上下左右四个方向 const int dx[] = {-1, 1, 0, 0}; const int dy[] = {0, 0, -1, 1}; // DFS 函数,用于标记当前连通区域中的所有棋子 void dfs(char board[SIZE][SIZE], bool visited[SIZE][SIZE], int x, int y) { visited[x][y] = true; // 标记当前位置已访问 // 遍历四个方向 for (int i = 0; i < 4; ++i) { int nx = x + dx[i]; int ny = y + dy[i]; // 检查新位置是否合法且未访问过 if (nx >= 0 && nx < SIZE && ny >= 0 && ny < SIZE && !visited[nx][ny] && board[nx][ny] == '.') { dfs(board, visited, nx, ny); // 继续深搜 } } } int count_eagles(char board[SIZE][SIZE]) { bool visited[SIZE][SIZE] = {false}; // 初始化访问标志矩阵 int eagle_count = 0; // “鹰”的数量计数器 // 遍历整个棋盘 for (int i = 0; i < SIZE; ++i) { for (int j = 0; j < SIZE; ++j) { if (!visited[i][j] && board[i][j] == '.') { dfs(board, visited, i, j); // 发现新的“鹰” eagle_count++; // 增加计数 } } } return eagle_count; } int main() { char board[SIZE][SIZE]; // 定义10x10棋盘 printf("请输入10x10棋盘布局,每行包含10个字符(-.):\n"); // 输入棋盘布局 for (int i = 0; i < SIZE; ++i) { scanf("%s", board[i]); } // 调用函数计算“鹰”的数量 int result = count_eagles(board); printf("棋盘中共有 %d 个‘鹰’。\n", result); return 0; } ``` --- 此代码实现了基于深度优先搜索的方法来统计棋盘上由 `'.'` 表示的己方棋子所构成的连通区域数量[^2]^。通过定义方向数组 `dx` 和 `dy` 来控制移动的方向,确保只在上下左右四个方向进行探索。每次发现一个新的未访问的 `'.'` 棋子时,调用 `dfs` 方法将其所在的连通区域全部标记为已访问,并增加计数器。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值