#include int n = 0; int rest[7][7]; void swap(int *a, int *b) { int m; m = *a; *a = *b; *b = m; } void perm(int list[], int k, int m) { int i; int j; if(k > m) { for (i=0; i<7; i++) { for (j=0; j<7; j++) { if (rest[i][j] == 0) return; if (rest[i][j] != list[i]) continue; if (rest[i][j] == list[i]) break; } } n++; printf("Solution: %d\n", n); printf("钱 赵 孙 李 周 吴 陈\n"); printf("=============================================================\n"); for(i = 0; i <= m; i++) { switch (list[i]) { case 1: printf("星期一 "); break; case 2: printf("星期二 "); break; case 3: printf("星期三 "); break; case 4: printf("星期四 "); break; case 5: printf("星期五 "); break; case 6: printf("星期六 "); break; case 7: printf("星期日 "); break; default: break; } } printf("\n\n\n"); } else { for(i = k; i <= m; i++) { swap(&list[k], &list[i]); perm(list, k + 1, m); swap(&list[k], &list[i]); } } } int main() { printf("注意:\n"); printf(" 1.请按钱、赵、孙、李、周、吴、陈的顺序输入休息每个人的时间。\n"); printf(" 2.输入星期时,请直接输入数字,如要输入'星期一',就用'1'代替,以此类推。\n"); printf(" 3.星期与星期之间用空格隔开,每输入完一个人的休息日,在其后输入0,再按回车继续下一人。\n"); printf("\n"); int list[] = {1, 2, 3, 4, 5, 6, 7}; int i, j; for(i = 0; i < 7; i++) { printf("请输入第 %d 个人的休息时间:\n", i+1); for(j = 0; j < 7; j++) { scanf("%d", &rest[i][j]); if(rest[i][j] == 0) break; } } printf("\n\n\n"); perm(list, 0, 6); getchar(); printf("输出完毕,按回车键结束!\n"); return 0; }