- 论坛徽章:
- 0
|
[回溯法]请教一个程序的解?高程试题!
- #include <stdio.h>;
- #include <stdlib.h>;
- #define N 8 /*N 表示任务数和工人数*/
- int c[N][N];
- unsigned int mincost = 65535; /*设置的初始值,大于可能的费用*/
- int task[N];
- int temp[N];
- int worker[N];
- void plan(int k,unsigned int cost)
- {
- int i;
- if( [color=red]k == N[/color] && cost < mincost){
- mincost = cost;
- for (i = 0; i < N; i++)
- temp[i] = task[i];
- }else{
- for (i = 0; i < N; i++)
- /*分配任务 k*/
- if (worker[i] == 0 && [color=red]cost + c[k][i] < mincost[/color]){
- worker[i] = 1;
- task[k] =[color=red] i; [/color]
- plan(k + 1, cost + c[k][i]);
- [color=red]worker[i] = 0;[/color]
- task[k] = 0;
- }/*if*/
- }
- }/*Plan*/
- void main()
- {
- int i,j;
- for (i = 0; i < N; i++){ /*设置每个人任务由不同工人承担时的费用及全局数组的初值*/
- worker[i] = 0;
- task[i] = 0;
- temp[i] = 0;
- }
- plan(0, 0); /*从任务0开始分配*/
- printf("\n最小差用=%d\n", mincost);
- for (i = 0; i < N; i++){
- for (j = 0; j < N; j++)
- printf("%-2d ", c[i][j]);
- printf("\n");
- }
- printf("\n\n");
- for (i = 0; i < N; i++)
- printf("Task%d is assigned to Worker%d\n", i, temp[i]);
- }/*main*/
复制代码 |
|