20分求助,跟第二篇题解一样的思路
  • 板块P1902 刺杀大使
  • 楼主jcgg
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/4/24 17:29
  • 上次更新2023/10/28 02:58:36
查看原帖
20分求助,跟第二篇题解一样的思路
477005
jcgg楼主2022/4/24 17:29
#include <stdio.h>
#include <string.h>
int board[1005][1005], n, m, hold[1005][1005], flag = 0, fx[5] = {1, -1, 0, 0},
                                               fy[5] = {0, 0, 1, -1};
void dfs(int i, int j, int max) {
  if (i == n) {
    flag = 1;
    return;
  }
  for (int k = 0; k < 4; k++) {
    int x = i + fx[k], y = j + fy[k];
    if (x >= 1 && x <= n && y >= 1 && y <= m && board[x][y] <= max &&
        hold[x][y] != 1 && flag != 1) {
      hold[x][y] = 1;
      dfs(x, y, max);
      hold[x][y] = 0;
      if (flag == 1)  return ;
    }
  }
}
int main() { 
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      scanf("%d", &board[i][j]);
    }
  }
  hold[1][1] = 1;
  int left = 0, right = 1000;
  while (left + 1 < right) {
    flag = 0;
    int mid = (left + right) / 2;
    dfs(1, 1, mid);
    memset(hold, 0, sizeof(hold));
    hold[1][1] = 1;
    if (flag == 1)  //说明mid可以满足题意,可以试着缩小mid
      right = mid;
    else  //说明目前mid太小
      left = mid;
  }
  printf("%d", right);
  return 0;
}
2022/4/24 17:29
加载中...