/* 时间:2011-11-20 作者:xiaosi 题目:工作分配问题*/#include<iostream>#include<cstdio>using namespace std;#define M 100class Work{ friend void work(); private: void Backtrack(int t); int N;//N件工作 N个人 int cw;//当前费用 int bestw;//最少费用 int flag[M]; int c[M][M];//费用 public: void Print();};void Work::Backtrack(int t){//搜索t第层 int i,j; if(t>N)//到达叶子节点 { if(cw<bestw) { bestw = cw; } return; } else { for(i=1;i<=N;i++) { if(cw<bestw&&flag[i]==0) { cw+=c[t][i]; flag[i]=1; Backtrack(t+1); cw-=c[t][i]; flag[i] = 0; } } }}void work(){ int i,j; Work w; w.bestw = 1000000; w.cw = 0; scanf("%d",&w.N); for(i=1;i<=w.N;i++) { for(j=1;j<=w.N;j++) { scanf("%d",&w.c[i][j]); } } for(j=1;j<=w.N;j++) { w.flag[j]=0; } w.Backtrack(1); printf("%d\n",w.bestw);}int main(){ work(); return 0;}
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow