解题思路: 从四条边开始搜索就OK了
注意事项:
参考代码:
#include"bits/stdc++.h" using namespace std; // 定义一个11x11的二维数组a,用于存储输入的矩阵 int a[11][11], kkk = 0; // 定义四个方向的移动向量,分别表示右、左、下、上 int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; void dfs(int x, int y) { // 将当前节点标记为已访问 a[x][y] = 1; // 遍历四个方向 for (int i = 0; i < 4; i++) { // 计算下一个节点的坐标 int nx = x + dx[i]; int ny = y + dy[i]; // 检查下一个节点是否在边界内且未被访问过 if (nx >= 1 && ny >= 1 && nx <= 10 && ny <= 10 && a[nx][ny] == 0) { // 递归调用dfs函数继续搜索 dfs(nx, ny); } } } int main() { // 读取输入的10x10矩阵 for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { cin >> a[i][j]; } } // 从第一列的所有节点开始进行深度优先搜索 for (int i = 1; i <= 10; i++) { if (a[i][1] == 0) { dfs(i, 1); } } // 从第一行的所有节点开始进行深度优先搜索 for (int i = 1; i <= 10; i++) { if (a[1][i] == 0) { dfs(1, i); } } // 从最后一列的所有节点开始进行深度优先搜索 for (int i = 1; i <= 10; i++) { if (a[10][i] == 0) { dfs(10, i); } } // 从最后一行的所有节点开始进行深度优先搜索 for (int i = 1; i <= 10; i++) { if (a[i][10] == 0) { dfs(i, 10); } } // 统计未被访问到的节点数量 for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { if (a[i][j] == 0) { kkk++; } } } // 输出未被访问到的节点数量 cout << kkk << endl; return 0; }
0.0分
0 人评分