题目链接:
描述:
Isenbaev是国外的一个大牛。
现在有许多人要参加ACM ICPC。
一共有n个组,每组3个人。同组的3个人都是队友。
大家都想知道自己与大牛的最小距离是多少。
大牛与自己的最小距离当然是0。大牛的队友和大牛的最小距离是1。大牛的队友的队友和大牛的最小距离是2……以此类推。
如果实在和大牛没有关系的只好输出undefined了。
第一行读入n。表示有n个组。1 ≤ n ≤ 100
接下来n行,每行有3个名字,名字之间用空格隔开。每个名字的开头都是大写的。
每行输出一个名字,名字后面空格后输出数字a或者字符串undefined,a代表最小距离。
名字按字典序输出。
思路:
这一题我做的相当纠结,整了好几个小时。其实思路很简单,就是从Isenbaev这个人开始bfs,由于bfs可以记录每个点到起始搜索点的最短距离,正好就是答案。但是要注意没有Ixenbaev的情况,我已开始就栽在这了。
但是有几个问题:1:建图问题。每个点不是 int了,都是string类型,不好建图。后来想了想就用 了stl的map,把每个人名和int型映射,int就代表这个节点。先把所有人名插入到map里面,(这时已经按照字典序排列了,map容器的特性)。这样就建好图了。每个人名都有个int编号了,就用邻接矩阵建图再bfs就好了。bfs记录每个节点的dis[] 是多少,可以看看算法导论上这一节讲的挺好的。
2特殊case。有些情况是这组人没有一个人是 Isenbaev,这时候所有人都是undefined.一开始就没考虑到结果runtime error #3.
//g++ 4.7.2 0.031s#include #include #include #include #include