工作分配问题java回溯法_工作分配问题(回溯算法)

2015-08-19 08:52 | 45

/*

时间:2011-11-20

作者:xiaosi

题目:工作分配问题

*/

#include

#include

using namespace std;

#define M 100

class 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 = cw;

}

return;

}

else

{

for(i=1;i<=N;i++)

{

if(cw

{

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;

}  回复  更多评论

你可能感兴趣的:(工作分配问题java回溯法)