#include <stdio.h>
/* 【问题描述】和尚挑水
* 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:
* 和尚1: 星期二,四;
* 和尚2: 星期一,六;
* 和尚3: 星期三,日;
* 和尚4: 星期五;
* 和尚5: 星期一,四,六;
* 和尚6: 星期二,五;
* 和尚7: 星期三,六,日;
* 请将所有合理的挑水时间安排表
* */
/* 【问题描述】和尚挑水
* 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:
* 和尚1: 星期二,四;
* 和尚2: 星期一,六;
* 和尚3: 星期三,日;
* 和尚4: 星期五;
* 和尚5: 星期一,四,六;
* 和尚6: 星期二,五;
* 和尚7: 星期三,六,日;
* 请将所有合理的挑水时间安排表
* */
int monk[7][7] = {{0, 1, 0, 1, 0, 0, 0},
{1, 0, 0, 0, 0, 1, 0},
{0, 0, 1, 0, 0, 0, 1},
{0, 0, 0, 0, 1, 0, 0},
{1, 0, 0, 1, 0, 1, 0},
{0, 1, 0, 0, 1, 0, 0},
{0, 0, 1, 0, 0, 1, 1}};
int sched[7];
int used[7];
void display(int *sched)
{
int i;
printf("\n-----------\n");
for (i = 0; i < 7; i++) {
printf("星期:%d和尚%d 挑水\n",i + 1, sched[i]);
}
printf("\n----------\n");
}
void arrange(int pos)
{
int i;
if (pos == 7)
{
display(sched);
}
for (i = 0; i < 7; i++) {
if (monk[i][pos] == 1 && used[i] == 0) {
sched[pos] = i + 1;
used[i] = 1;
arrange(pos+1);
used[i] = 0;
}
}
}
int main()
{
arrange(0);
return 0;
}