华为杯编程比赛最后一题题目附上自己的解题代码
2014-05-12 00:02
537 查看
题目:
超哥来到一间密室,忽然一阵阴风把门关上了。魔法学校的门需要魔力才能打开,而超哥没有那间密室的魔力。超哥继续往密室深处走,发现一堆魔法瓶和一些古老的文字。上面写着:欲开启密室,需收集所有瓶中魔力。开启魔法瓶需严格按照顺序,否则将焚毁密室…
文字记载了一个N×N
的0,1矩阵G
N×N
,还记录了任意两个魔法瓶之间的开启规则:
你可以从任意一个魔法瓶开始。
魔法瓶j
能在紧随魔法瓶i
之后被安全打开,当且仅当G
i,j
=1
。
魔法瓶j
紧随魔法瓶i
之后被打开,密室会被焚毁,当且仅当G
i,j
=0
。
文字最后写道,任意两个魔法瓶,都可以相邻。即:G
i,j
⊕G
j,i
=1(∀i≠j)
你能帮超哥找到一个开启所有魔法瓶方案吗?
,魔法瓶的个数,接着N
行,每行N
个数,0或1。
第i
行第j
列为1,表示开启第i
个魔法瓶后,下一个开启的魔法瓶可以是j
。
保证矩阵 第i
行第j
列与
第j
行第i
列数值不同,第i
行i
列为0。
N≤1000
个数,空格隔开,表示打开魔法瓶编号顺序。
以下是我的代码,但是还不知道是否正确,贴出来和大家一起讨论讨论:
每次参加比赛都会紧张得脑子短路,当时也没能做出来。。不知道对不对
超哥来到一间密室,忽然一阵阴风把门关上了。魔法学校的门需要魔力才能打开,而超哥没有那间密室的魔力。超哥继续往密室深处走,发现一堆魔法瓶和一些古老的文字。上面写着:欲开启密室,需收集所有瓶中魔力。开启魔法瓶需严格按照顺序,否则将焚毁密室…
文字记载了一个N×N
的0,1矩阵G
N×N
,还记录了任意两个魔法瓶之间的开启规则:
你可以从任意一个魔法瓶开始。
魔法瓶j
能在紧随魔法瓶i
之后被安全打开,当且仅当G
i,j
=1
。
魔法瓶j
紧随魔法瓶i
之后被打开,密室会被焚毁,当且仅当G
i,j
=0
。
文字最后写道,任意两个魔法瓶,都可以相邻。即:G
i,j
⊕G
j,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
以下是我的代码,但是还不知道是否正确,贴出来和大家一起讨论讨论:
#include<iostream> #include<stack> using namespace std; int main(){ int n; cin>>n; stack<int> ways; int *bottles=new int[n*n]; for(int i=0;i<n*n;i++){ cin>>bottles[i]; } int index=1; int count=1; while(count<n){ if(bottles[index-1] == 0){ int a=index/n; int b=index%n; if(b == 0){ a--; b=n; } //如果是在每行的结尾且没有值为1的点 if(b == n){ //堆栈不为空的话,弹出头 if(!ways.empty()){ int ll=ways.top(); ways.pop(); int lll=ways.top(); ways.pop(); count--; index=n*(lll-1)+ll+1; } //堆栈为空,即代表前面全部没有符合的情况,则index只是加1. else{ index++; } } //不是行尾的话,index加1就可 else { index++; } } //节点值为1的时候,把行,列值push进堆栈 else{ int a=index/n; int b=index%n; if(b == 0){ a--; b=n; } ways.push(a+1); ways.push(b); count++; index=n*(b-1)+1; } } //整个表检查结束,把堆栈里面的数字放进数组 int *result=new int[2*n-2]; for(int j=2*n-3;j>=0;j--){ int temp=ways.top(); result[j]=temp; ways.pop(); } for(int k=0;k<2*n-2;k++){ if(k == 0 || k == 2*n-3) cout<<result[k]<<" "; else { if(k%2 == 1) cout<<result[k]<<" "; } } return 0; }
每次参加比赛都会紧张得脑子短路,当时也没能做出来。。不知道对不对
相关文章推荐
- CSDN高校俱乐部编程挑战群一道仅有7人通过的超5星微软比赛题目-------解题思路&优秀代码分享
- 华为笔试机考编程题 购物单 解题方案及python代码实现
- 一道仅有7人通过的超5星微软比赛题目-------解题思路&优秀代码分享,邀你来“找茬儿”
- 题目不难,还是自己懂得代码太少,纯粹凭思维解题。。努力学吧。。
- 纪念下自己代码人生的一小步,自己写出的华为2015招聘题目
- 编程爱好者论坛第六次编程比赛题目
- 牵扯较多属性和方法的类题目,很简单的题目本来不想发的,如果有同学学到这个题目感觉太长不愿敲代码,copy走我的即可~不过还是建议自己打一打
- 学校的华为杯程序设计比赛题目
- 【编程题目】n 支队伍比赛,分别编号为 0,1,2。。。。n-1,已知它们之间的实力对比关系,
- 【HDU4313】Matrix 多校 解题报告+AC代码+思路+算法正确性证明,此为Kruskal贪心恶心版本,非自虐倾向慎入!建议想找解题报告的童鞋看简单版本的,这个我写给自己【目标达成 0.2%】
- 华为C语言编程规范—代码测试、维护2
- 华为比赛遇到的问题自己的解决办法
- java自己造编程IDE中,提示代码补…
- 哈工大历年复试编程题目及参考代码
- 通过阅读别人的代码轻松提高自己的编程能力
- 【编程初学者】创建自己的开源项目7-基于当前分支,提交归并请求到主分支2-代码冲突(myeclipse+git)
- 为自己的那个打字游戏附上完整代码
- 基于visual c++之windows核心编程代码分析(64)现有的exe文件中添加自己的代码
- 最小生成树,POJ和HDU几道题目的解题报告(基于自己写的模板)
- 二维数组的动态使用(记录)(附上一段自己的代码)