int  JOB=5;
int PERSON=5;
int DEFAULTMIN=35*PERSON;
int
 table[JOB][]{
  {10,  5,  7, 12,  8},
  {14, 20, 15, 10, 15},
  {18, 30, 20, 25, 22},
  {35,  8, 18, 20, 12},
  {20, 13,  8, 10, 17},
 };static int nextplaces(int *place, int len, int max){
 //add most left place
 int
  i,
  flags;
 
 //loop while "place" is containg the same number in.
 for(;;){
  //next "place"
  for(i=0;i<len;i++){
   if((place[i]=(place[i]+1)%max)!=0)
    break;
  }
  
  //if place is maximum number((max-1)^len), then it returns 1;
  if(i==len)
   return 1;
  else{
   //else check "place" hasn't a same number in.
   for(i=flags=0;i<len;i++){
    if(flags & (2<<place[i])){
     flags=0;
     break;
    }else
     flags|=2<<place[i];
   }
   if(flags)
    return 0;
  }
 }
}int main(void){
 int
  person,
  job,
  min,
  place[PERSON], mem[PERSON];
 
 //clear "place"
 for(job=0;job<JOB;place[job++]=0);
 
 //compute minimum number
 min=DEFAULTMIN;
 for(;!nextplaces(place, PERSON, JOB);){
  int sum;
  sum=0;
  //get sum
  for(person=0;person<PERSON;person++)
   sum+=table[place[person]][person];
  
  //compare
  if(min>sum){
   //replace place
   for(person=0;person<PERSON;person++)
    mem[person]=place[person];
   min=sum;
  }
 }
 
 //outputs
 printf("minimum is %d\n", min);
 for(person=0;person<PERSON;person++)
  printf("person%d does job%d(cost %d)\n", person, mem[person], table[mem[person]][person]);
 
}

解决方案 »

  1.   

    大致是这样子吧,没有调试,对了再把printf(输出)改成consle.Write吧
      

  2.   

    真是感谢oldmoon的帮助
    但是下面这段话好像有问题int  JOB=5;
    int PERSON=5;
    int DEFAULTMIN=35*PERSON;
    int
     table[JOB][]{
      {10,  5,  7, 12,  8},
      {14, 20, 15, 10, 15},
      {18, 30, 20, 25, 22},
      {35,  8, 18, 20, 12},
      {20, 13,  8, 10, 17},
     };static int nextplaces(int *place, int len, int max){
     //add most left place
     int
      i,
      flags;
     
     //loop while "place" is containg the same number in.
     for(;;){
      //next "place"
      for(i=0;i<len;i++){
       if((place[i]=(place[i]+1)%max)!=0)
        break;
      }