C语言排班系统

匿名网友 |浏览995次
收藏|2019/06/18 15:07

满意回答

2019/06/18 15:37

#include <stdio.h>#include <conio.h>#define T 7 //排班周期#define N 7 //人员数目#define X 1 //每人每周期可以休息X天,X<T#define Y 1 //每天最多可以有Y人休息,Y>=N*X/Tint total=0;void Print(int pb[][T]){ int i,j; printf("\nXiuXi FangAn %d:\n",++total); for(i=0;i<N;++i){ printf("%d:",i); for(j=0;j<T;++j){ if(pb[i][j]==2)printf("%d ",j); } printf("\n"); } getch();}int KeXing(int pb[][T],int k,int j){//检验k人员在j日期休息是否可行 int s=0,i; for(i=0;i<T;++i)s+=(pb[k][i]==2); if(s>X)return 0; for(s=0,i=0;i<N;++i)s+=(pb[i][j]==2); if(s>Y)return 0; return 1;}void PaiBan(int pb[][T],int k){//给第k位人员安排休息日 int i,j; for(j=0;j<T;++j){ if(pb[k][j]==1){//k人员愿意在j日期休息 pb[k][j]=2; if(KeXing(pb,k,j)){ if(k==N-1){//找到一个方案 Print(pb);//输出休息方案 }else{ PaiBan(pb,k+1); } } pb[k][j]=1;//准备更换下一个休息意愿日测试 } }}int main(){ int i,j,pb[N][T]={0}; printf("====PaiBan XiTong====\n"); printf("XiuXi YiYuan i,j( RenYuan i=0~%d, RiQi j=0~%d, JieShu -1,-1 ):\n",N-1,T-1); do{ scanf("%d,%d",&i,&j); if(i>=0&&i<N&&j>=0&&j<T){ pb[i][j]=1; }else{ break; } }while(1); PaiBan(pb,0); printf("\nGong You %d Zu FangAn.",total); printf("\nFinished!\n"); getch(); return 0;}

水中鱼__001

其他回答(0)
0人关注该问题
+1

 加载中...