题目概述
在软件开发中,头文件之间可能存在循环依赖的问题。例如,a.h
包含 b.h
,b.h
包含 c.h
,而 c.h
又包含 a.h
,这样就形成了一个循环依赖。循环依赖的缺点在于,任意一个头文件的修改都会导致所有相关的头文件需要重新编译,极大地降低了开发效率。为了解决这个问题,现需要开发一个工具来检测头文件是否存在循环依赖。如果存在循环依赖,则输出循环依赖环中包含的文件数量;如果不存在循环依赖,则输出 -1
。
思路分析
本题要求检测头文件之间是否存在循环依赖,并计算循环依赖环中包含的文件数量。其本质是判断图中是否有环且环上有几个节点。由于题目保证至多只有一个循环依赖,因此一旦检测到一个环即可停止。
头文件循环依赖,指 a.h 包含 b.h,b.h 包含 c.h,c.h 包含 a.h。
头文件循环依赖的缺点是,任一头文件修改,会导致循环依赖环的所有相关文件都需要重新编译,大大降低开发效率。
现开发一个工具,用来检测头文件是否循环依赖,若有循环依赖,则给出循环依赖的环中包含的文件数量。
用例保证至多只有一个循环依赖。没有循环包含头文件,因此返回 −1 .
3
a.h b.h c.h
b.h d.h
d.h a.h
第一行一个整数 n ,表示记录数。
(1<=n<=1000) 其后每一行,a.h b.h c.h,表示头文件 a.h 包含了两个头文件。
3
解释:
a.h包含b.h
b.h包含d.h
d.h包含a.h
形成一个环,环中的头文件数量为 3 个: a.h、b.h、d.h
输入
3
a.h b.h c.h
b.h d.h
d.h a.h
输出
3
说明
a.h 包含 b.h
b.h 包含 d.h
d.h 包含 a.h 形成一个环,
环中的头文件数量为 3 个: a.h、b.h、d.h
输入
3
a.h b.h
b.h c.hd.h e.h
输出
-1
说明
无循环调用,返回 −1
文件名格式:
1.采用dos 8.3格式,区分大小写
2.只包含英文字母和至多一个点号分隔符