#include <stdio.h>
void person( int i );
int Like[6][6] = {{0}, {0, 0, 0, 1, 1, 0},
{0, 1, 1, 0, 0, 1},
{0, 0, 1, 1, 0, 1},
{0, 0, 0, 0, 1, 0},
{0, 0, 1, 0, 0, 1}};
int BookFlag[6] = {0};
int BookTaken[6] = {0};
void main( )
{
person( 1 );
}
void person(int i) // 尝试给第i个人分书
{ int j, k;
char a;
printf("i=%d\n",i);
for(j = 1; j <= 5; j++) // 尝试把每本书分给第i个人
{ printf("j=%d\n",j);
if((BookFlag[j] != 0) || (Like[i][j] == 0)) continue; // 失败
BookTaken[i] = j; // 把第j本书分给第i个人
BookFlag[j] = 1;
printf("把第%d本书分给第%d个人\n",j,i);
if(i == 5){ // 已找到一种分书方案
for(k = 1; k <= 5; k++) printf("%d ", BookTaken[k]);
printf("\n");
//getchar(a);
}
else{
person(i + 1); // 给第i+1个人分书
}
printf("回溯!\n");
BookTaken[i] = 0; // 回溯,把这一次分得的书退回
BookFlag[j] = 0;
}
}