N - Find a way

傻傻的写了两个搜索 一人一个
然后要注意,不是两个人都能走到某个点的,所以一定要把那个点去掉。
至于搜索就都是 常规操作了

struct node {int x, y;int s;
};
char map[len][len];
int vis1[len][len], vis2[len][len];
int dv[4][2] = {{1,0},{0,-1},{0,1},{-1,0}};
int n, m;
int x1,y1,x2,y2;
struct node head;
queue <struct node> q;
int main(){while (cin >> n >> m) {Init();struct node tmp_1;tmp_1.x = x1; tmp_1.y = y1; tmp_1.s = 0;q.push(tmp_1);bfs1();struct node tmp_2;tmp_2.x = x2; tmp_2.y = y2; tmp_2.s = 0;while (!q.empty()) q.pop();q.push(tmp_2);bfs2();int min = maxn;for (int i=0; i<n; i++){for (int j=0; j<m; j++){if (map[i][j] == '@'){if (vis1[i][j] != 0 && vis2[i][j] != 0){if (min > vis1[i][j] + vis2[i][j])min = vis1[i][j] + vis2[i][j];}}}}cout << min * step << endl;//step = 11;}return 0;
}
void Init(){memset(vis1, 0, sizeof(vis1));memset(vis2, 0, sizeof(vis2));memset(map, '.', sizeof(map));x1 = 0; x2 = 0; y1 = 0; y2 = 0;for (int i=0; i<n; i++){for (int j=0; j<m; j++){cin >> map[i][j];if(map[i][j] == 'Y'){x1 = i;y1 = j;}if(map[i][j] == 'M'){x2 = i; y2 = j;}}}vis1[x1][y1] = 1; vis2[x2][y2] = 1;while (!q.empty()) q.pop();}
void bfs1(){while (!q.empty()) {head = q.front();q.pop();for (int i=0; i<4; i++){int _x = head.x + dv[i][0];int _y = head.y + dv[i][1];if (_x < 0 || _y < 0 || _x >=n || _y>= m)continue;if (vis1[_x][_y] != 0) continue;if (map[_x][_y] == '#') continue;if (map[_x][_y] == '@') {vis1[_x][_y] = head.s + 1;struct node tmp;tmp.x = _x; tmp.y = _y; tmp.s = head.s + 1;q.push(tmp);}else{vis1[_x][_y] ++;struct node tmp;tmp.x = _x; tmp.y = _y; tmp.s = head.s + 1;q.push(tmp);}}}
}
void bfs2(){while (!q.empty()) {head = q.front();q.pop();for (int i=0; i<4; i++){int _x = head.x + dv[i][0];int _y = head.y + dv[i][1];if (_x < 0 || _y < 0 || _x >=n || _y>= m)continue;if (vis2[_x][_y] != 0) continue;if (map[_x][_y] == '#') continue;if (map[_x][_y] == '@') {vis2[_x][_y] = head.s + 1;struct node tmp;tmp.x = _x; tmp.y = _y; tmp.s = head.s + 1;q.push(tmp);}else{vis2[_x][_y] ++;struct node tmp;tmp.x = _x; tmp.y = _y; tmp.s = head.s + 1;q.push(tmp);}}}
}

最新文章

  1. mysql数据库计划是什么_计划备份mysql数据库
  2. servlet php,JSP和Servlet的区别及PHP类比
  3. Optional 详解 Java
  4. 计算代码重复率_了解了知网大学生论文查重原理,重复率想高于6%都难!
  5. 在win10上使用Vmware安装Mac OS
  6. 使用sqoop从Oracle或mysql抽取数据到HDFS遇到的报错及解决
  7. 一朵更好的云 MADE IN 青云QingCloud
  8. ab st语言编程手册_从零开始学习ST/SCL编程语言:一赋值及条件执行指令的讲解...
  9. java与C#对比文章阅读
  10. springdata和mysql_Spring Boot使用Spring Data JPA访问MySQL数据库
  11. (转)Spring实现IoC的多种方式
  12. 如何使用TunesKit AceMovi Video Editor Mac在视频中添加贴纸
  13. 【C】C99 restrict 关键字
  14. Bridge(桥模式)
  15. 2021年茶艺师(初级)报名考试及茶艺师(初级)模拟考试题库
  16. 银行Ⅰ类、Ⅱ类、III类账户
  17. 误发邮件怎么办?发错邮件如何撤回?/
  18. 我和王争学设计模式|代理模式
  19. java 雷达图_Android雷达图(蜘蛛网图),自定义view之雷达图,正五边雷达图,分数图...
  20. Unity 安卓 apk 反编译 重新打包 签名修改

热门文章

  1. DataColumn.Expression 语法
  2. 对于电脑快捷键的掌握。
  3. C语言offsetof用法以及其扩展用法
  4. Helium自动化框架 Select下拉选
  5. 支付宝小程序开发之使用 alipay.fund.trans.uni.transfer接口支付宝打款到银行卡
  6. 创业创新领导力课程观后感(二)
  7. html css——图片元素
  8. 《iOS取证实战:调查、分析与移动安全》一2.5 与iTunes的交互
  9. 学习笔记TF053:循环神经网络,TensorFlow Model Zoo,强化学习,深度森林,深度学习艺术...
  10. 成语接龙(深搜模板)