锁定老帖子 主题:公司笔试算法题
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-21
#include <iostream> using namespace std; int vis[6]= {0,1,2,1,1,1}; int res[7]; bool check(int pos,int x,int front_x) { if(pos==3 && x==4) return false; if(x==3 && front_x==5) return false; if(x==5 && front_x==3) return false; return true; } void search(int pos) { if(pos==7) { for(int i=1;i<7;i++) { cout<<res[i]<<' '; } cout<<endl; return; } for(int i=1;i<=5;i++) { if(vis[i]>0) { int x=i,front_x=(pos==1?-1:res[pos-1]); if(check(pos,x,front_x)) { res[pos]=i; vis[i]--; search(pos+1); vis[i]++; } } } } int main(int argv,char** argvs) { search(1); return 0; } 简单的回溯加剪枝判断 |
|
返回顶楼 | |
发表时间:2012-02-14
最后修改:2012-02-14
感觉代码不漂亮
groovy的 List a = [1,2,2,3,4,5] as List def t = m(a) def m(List a) { if (a.size() == 1) return a def result = [] for (i in 0..<a.size()) { List b = new ArrayList() b.addAll(a) b.remove(i); (m(b)).each{ result.add(""+a[i]+it) } } return result } out = [] t.each { if (it[2] != "4" && it.indexOf("35")== -1 && it.indexOf("53")== -1 && !out.contains(it)) out.add(it) } print out out.size() 到底结果是多少个呢?198个? |
|
返回顶楼 | |