# 用于找到起始点(某一个2)的函数 deffind_start(grid, n, m): # 对整个grid二维数组进行双重循环遍历, for i in range(n): for j in range(m): # 找到其中的一个2之后,返回 if grid[i][j] == 2: return i, j
# 构建DFS函数 defDFS(grid, i, j, checkList): global flag, ans # 将该点标记为已经检查过 checkList[i][j] = True # 遍历上下左右四个方向的邻点坐标 for dx, dy in DERICTIONS: next_i, next_j = i + dx, j + dy # 若近邻点满足三个条件: # 1.没有越界 2. 近邻点尚未被检查过 3.近邻点不为障碍 if ((0 <= next_i and 0 <= next_j and checkList[next_i][next_j] == False and grid[next_i][next_j] != 1): # 如果存在近邻点是2,表示两个2互相联通,设置flag为True if grid[next_i][next_j] == 2: flag = True # 如果存在近邻点是3,则说明聚餐地点+1,ans += 1 if grid[next_i][next_j] == 3: ans += 1 # 对近邻点(ni, nj)进行DFS搜索 DFS(grid, next_i, next_j, checkList)
# 输入地图的行数,列数 n, m = map(int, input().split()) # 构建网格 grid = list() for _ in range(n): grid.append(list(map(int, input().split())))
# 初始化答案变量ans为0,表示能够同时到达的聚餐地点, ans = 0
# 初始化标记flag为False,表示两个2是否相互联通 flag = False
# 调用find_start,找到搜索起点 si, sj = find_start(grid, n, m)
# 初始化数组checkList用于DFS遍历过程中的检查 # 0表示尚未访问,1表示已经访问 checkList = [[False] * m for _ in range(n)]
# 调用DFS函数,传入起点 DFS(grid, si, sj, checkList)
# 输出答案,若最后flag为True,则输出ans,否则输出0 print(ans) if flag else print(0)
// 用于找到起始点(某一个2)的函数 privatestaticint[] findStart(int[][] grid, int n, int m) { for (int i = 0; i for (int j = 0; j if (grid[i][j] == 2) { returnnewint[]{i, j}; } } } returnnewint[]{-1, -1}; // 没有找到起始点 }
// 构建DFS函数 privatestaticvoidDFS(int[][] grid, int i, int j, boolean[][] checkList, boolean[] flag, int[] ans){ int n = grid.length; int m = grid[0].length;
// 将该点标记为已经检查过 checkList[i][j] = true;
// 遍历上下左右四个方向的邻点坐标 for (int[] dir : DIRECTIONS) { int next_i = i + dir[0]; int next_j = j + dir[1];
// 用于找到起始点(某一个2)的函数 pair<int, int> findStart(vector<vector<int>>& grid, int n, int m){ for (int i = 0; i for (int j = 0; j if (grid[i][j] == 2) { return {i, j}; } } } return {-1, -1}; // 没有找到起始点 }
// 构建DFS函数 voidDFS(vector<vector<int>>& grid, int i, int j, vector<vector<bool>>& checkList, bool& flag, int& ans){ int n = grid.size(); int m = grid[0].size();
// 将该点标记为已经检查过 checkList[i][j] = true;
// 遍历上下左右四个方向的邻点坐标 for (auto& dir : DIRECTIONS) { int next_i = i + dir.first; int next_j = j + dir.second;
# 用于找到起始点(某一个2)的函数 deffind_start(grid, n, m): # 对整个grid二维数组进行双重循环遍历, for i in range(n): for j in range(m): # 找到其中的一个2之后,返回 if grid[i][j] == 2: return i, j
# 输入地图的行数,列数 n, m = map(int, input().split()) # 构建网格 grid = list() for _ in range(n):
grid.append(list(map(int, input().split())))
# 初始化答案变量ans为0,表示能够同时到达的聚餐地点, ans = 0
# 初始化标记flag为False,表示两个2是否相互联通 flag = False
# 调用find_start,找到搜索起点 si, sj = find_start(grid, n, m)
# 初始化数组checkList用于DFS遍历过程中的检查 # 0表示尚未访问,1表示已经访问 checkList = [[False] * m for _ in range(n)]
// 用于找到起始点(某一个2)的函数 staticint[] findStart(int[][] grid, int n, int m) { for (int i = 0; i for (int j = 0; j if (grid[i][j] == 2) { returnnewint[]{i, j}; } } } returnnewint[]{-1, -1}; // 没有找到起始点 }
publicstaticvoidmain(String[] args){ Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int m = scanner.nextInt();
int[][] grid = newint[n][m]; for (int i = 0; i for (int j = 0; j grid[i][j] = scanner.nextInt(); } }
int ans = 0; boolean flag = false; int[] start = findStart(grid, n, m);
Queue<int[]> queue = new ArrayDeque<>(); queue.add(start);
// 用于找到起始点(某一个2)的函数 pair<int, int> findStart(vector<vector<int>>& grid, int n, int m){ for (int i = 0; i for (int j = 0; j if (grid[i][j] == 2) { return make_pair(i, j); } } } return make_pair(-1, -1); // 没有找到起始点 }
intmain(){ int n, m; cin >> n >> m;
vector<vector<int>> grid(n, vector<int>(m)); for (int i = 0; i for (int j = 0; j cin >> grid[i][j]; } }
int ans = 0; bool flag = false; pair<int, int> start = findStart(grid, n, m);