美文网首页
2014“华为杯”苏、鲁高校大学生程序设计大赛选拔赛暨东南大学第

2014“华为杯”苏、鲁高校大学生程序设计大赛选拔赛暨东南大学第

作者: sleep_NULL | 来源:发表于2014-06-03 23:03 被阅读93次

    题目描述:

    超哥来到一间密室,忽然一阵阴风把门关上了。魔法学校的门需要魔力才能打开,而超哥没有那间密室的魔力。超哥继续往密室深处走,发现一堆魔法瓶和一些古老的文字。上面写着:欲开启密室,需收集所有瓶中魔力。开启魔法瓶需严格按照顺序,否则将焚毁密室…文字记载了一个N×N的0,1矩阵GN×N,还记录了任意两个魔法瓶之间的开启规则:你可以从任意一个魔法瓶开始。魔法瓶j能在紧随魔法瓶i之后被安全打开,当且仅当Gi,j=1。魔法瓶j紧随魔法瓶i之后被打开,密室会被焚毁,当且仅当Gi,j=0。文字最后写道,任意两个魔法瓶,都可以相邻。即:Gi,j⊕Gj,i=1(∀i≠j)你能帮超哥找到一个开启所有魔法瓶方案吗?

    输入:

    第一行一个整数N,魔法瓶的个数,接着N行,每行N个数,0或1。第i行第j列为1,表示开启第i个魔法瓶后,下一个开启的魔法瓶可以是j。保证矩阵 第i行第j列与 第j行第i列数值不同,第i行i列为0。N≤1000

    输出:

    N个数,空格隔开,表示打开魔法瓶编号顺序。

    样例输入:

    2

    0 0

    1 0

    样例输出:

    2 1

    问题分析:

    该题的本质即:

    在一“特殊”有向图中寻找一条不重复经过某个点的可行路径遍历图中所有点。

    而这个图究竟有多特殊呢?

    该图的特殊性描述如下:

    1、该图中任意两点之间存在一条路径;

    2、该路径为单向不可逆,即若存在A->B,则不存在B->A,反之亦然

    由以上两条特殊性可推出如下结论:

    若存在一条路径经过图中若干个点,例:2->1->3->4

    则必存在图中任意不在该路径中的点可插入该路径中使路径连通:

    假设该数组为arr,图中任意不在该路径中的点为5,则遍历arr[5][2],arr[5][1],

    arr[5][3],arr[5][4],若存在arr[5][num] = 1;则插入该数前,若不存在为1的值则插入路径尾部,因为若arr[5][4] = 0;由特殊性2可知arr[4][5] = 1;即点4可到达点5。

    java实现如下:

    相关文章

      网友评论

          本文标题:2014“华为杯”苏、鲁高校大学生程序设计大赛选拔赛暨东南大学第

          本文链接:https://www.haomeiwen.com/subject/krgdtttx.html