n次全排列和带期限的作业排序

算法设计与分析之n次全排列和带期限的作业排序|上机实验实习报告|计算机上机实习报告含源代码

流程图请联系站长QQ3249114谢谢

//n次全排列
#include <stdio.h>
#include <stdlib.h>
int number[20], len, temp;
void output(){
    int i;
    printf("\n");
    for(i=0; i<len; ++i)
        printf("%d ", number[i]);
}
int pailie(int n){
    int ii;
    if(n==len)
        output( );  
    for(ii=n; ii<len; ++ii) { 
        temp = number[ii]; number[ii] = number[n]; number[n] = temp;
        pailie(n+1); 
        temp = number[ii]; number[ii] = number[n]; number[n] = temp;         
    }  
    return 0;
}
int main(int argc, char *argv[]){
    int index = 0;
    scanf("%d", &len);
    while(index<len)
        scanf("%d", &number[index++]);
    pailie(0);
    system("PAUSE");
    return 0;
}
//带期限的作业排序问题
#include <iostream.h>
#include <iomanip.h>
void PX(int n,int *A);
void main()
{
 int *A,*B;
 int i,n;
 cout<<"请输入作业数n:";
 cin>>n;
 A=new int[n+1]; 
 B=new int[n+1]; 
 cout<<"请输入作业i的期限值A(1-"<<n<<")"<<endl;
 for(i=1;i<=n;i++)             
 {
  cout<<"作业"<<i<<"的期限:";
  cin>>A[i];
 }
 cout<<endl;
 cout<<"请输入作业i的收益值B(1-"<<n<<")"<<endl;
 for(i=1;i<=n;i++)            
 {
  cout<<"作业"<<i<<"的收益:";
  cin>>B[i];
 }
 cout<<endl;
 PX(n,A);
}
void PX(int n,int *A)
{
 int i,k,r;
 int *C=new int[n+1];
 k=1;
 A[0]=0;
 C[0]=0;
 C[1]=1;
  for(i=2;i<=n;i++)
 {
  r=k;
  while(A[C[r]]>A[i] && A[C[r]]!=r)
   r=r-1;
  if(A[C[r]]<=A[i] && A[i]>r)
  {
   for(int x=k;x>=r+1;x--)
    C[x+1]=C[x];
   C[r+1]=i;
   k++;
  }
 }
 cout<<"作业的最优处理排序:";
 for(i=1;i<=k;i++)
  cout<<setw(4)<<C[i];
 cout<<endl;
}

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有