算法导论 用拟阵求解任务调度问题

来源:互联网 发布:武汉汉阳美工 编辑:程序博客网 时间:2024/05/17 19:58
#include <stdio.h>#include <stdlib.h>#define N 7void swop(int *a,int *b){int temp=*a;*a=*b;*b=temp;}int partition(int *a,int p,int r,int *b,char type){int i=p-1,x=a[r];for(int j=p;j<r;j++){if(type=='A'){if(a[j]<a[r]){i++;swop(&a[i],&a[j]);swop(&b[i],&b[j]);}}else{if(a[j]>a[r]){i++;swop(&a[i],&a[j]);swop(&b[i],&b[j]);}}}swop(&a[i+1],&a[r]);swop(&b[i+1],&b[r]);return i+1;}void quickSort(int *a,int p,int r,int *b,char type){if(p>=r)return;int q=partition(a,p,r,b,type);quickSort(a,p,q-1,b,type);quickSort(a,q+1,r,b,type);}void printA(int *a,int len){for(int i=0;i<len;i++){printf("%2d ",a[i]);}printf("\n");}bool taskIndependence(int *d,int i,int *I,int Ilen){for(int j=d[i];j<Ilen;j++){if(I[j]+1>j)return false;}for(int j=d[i];j<Ilen;j++){I[j]++;}return true;}int getMax(int *d,int len){int max=0;for(int i=0;i<len;i++){if(d[i]>max)max=d[i];}return max;}void initArray(int *a,int len){for(int i=0;i<len;i++){a[i]=0;}}void main(){int d[N]={4,2,4,3,1,4,6};int w[N]={70,60,50,40,30,20,10};quickSort(w,0,6,d,'D');int Ilen=getMax(d,N)+1;int *I=(int*)malloc(Ilen*sizeof(int));initArray(I,Ilen);int iEx=N;for(int i=0;i<iEx;i++){if(!taskIndependence(d,i,I,Ilen)){iEx--;swop(&d[i],&d[iEx]);swop(&w[i],&w[iEx]);i--;}}quickSort(d,0,iEx-1,w,'A');quickSort(d,iEx,N-1,w,'A');printA(w,7);printA(d,7);getchar();}