关于BFS+异或(C++)
今天早上,我们做了场比赛,里面有一个题目是这样的。。
题目大意:
随着马场的繁荣,出现了越来越多的新马种。种族之间的沟通不畅严重影响了马场的和谐。这时,科学家发明了马语翻译机器人,正好可以解决这一难题。
机器人有 M 种,每种机器人能完成 K 个马种之间的语言翻译。问,利用这些机器人,能否实现 1 种群和 N 种群的马语翻译。 若可以,找到翻译过程至少需要用到多少种语言。
解析:
其实这道题目用最短路跑一片就可以了,无需任何玩意儿。。。。
但是我还是桀骜不驯,来吧,召唤白番薯(BFS)!!
其实BFS与最短路(spfa)差不多,但是对于最短路来说,我还是喜欢BFS(因为我背过板子)
问题:
初次看这到题目时,我的心里还是有点懵逼。。。。
所以还是要看看标的。。。。
但是最重要的就是"我卢本伟没有扣标!!!!!!!"
给大家伙们看看我遇到的问题吧:
1 void bfs() 2 { 3 int head = 0,tail = 1; 4 q[1] = 1; 5 vis[1] = 1; 6 while (head ^ tail) //蓝色 7 { 8 int x = q[++head]; 9 for (int j = lnk[x];j;j = nxt[j]) 10 if (!vis[son[j]]) 11 { 12 vis[son[j]] = 1; 13 dis[son[j]] = dis[x] + 1; 14 q[++tail] = son[j]; 15 } 16 } 17 }
就是那蓝蓝的玩意儿!!!!
那是啥?????
于是
一波询问
终于
搞懂了
"Please start your AK show"
解决:
先来普及一下异或:
1 i xor j
看这个玩意儿↑
诶!!!
打住!!!
这可是c++专场,Pascal怎么进来了(快走!!!);
1 i ^ j
这才对!!
看:
a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
现在到BFS了
1 void BFS() 2 { 3 int head=0; 4 int tail=1; 5 while(head^tail) 6 { 7 //Lazy to write labels........... 8 } 9 }
一般循环里都是head<tail的
可是他不是
我瞬间懵了。。。
后来才知道
如果head==tail
则为FALSE
不然为
TRUE
这我才知道
相信你也懂了!!!!
(一直bb)
最后
我只想说,作比赛有好多人都预知未来。。。。
bye~~~
原文地址:https://www.cnblogs.com/WestJackson/p/11396693.html
- Html与CSS快速入门01-基础概念
- 利用Fck的javascript-API创建fck编辑器
- ASPNET_WEBAPI快速学习02
- ExtJs学习笔记(17)_table布局
- Markdown快速入门
- JavaScript之apply()和call()的区别
- JavaScript之面向对象学习八(继承)
- JQuery快速入门
- JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)
- ExtJs学习笔记(16)_Form布局
- JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象
- 未来几年苹果公司很可能“不务正业”,进军汽车无人驾驶界
- ExtJs学习笔记(15)_fit布局
- JavaScript之call()和apply()方法详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法