论坛首页 综合技术论坛

公司笔试算法题

浏览 36040 次
精华帖 (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;
}

简单的回溯加剪枝判断
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个?
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics