⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fjs最优解0.cpp

📁 按作业效益非增序输入作业的截止期限
💻 CPP
字号:
#include<stdio.h>
void UNION(int i,int j,int parent[])
//使用加权规则合并根为i和j的两个集合,(i!=j)//
//PARENT(i)=-COUNT(i);PARENT(j)=-COUNT(j)//
{
	int x;
	x=parent[i]+parent[j];
	if(parent[i]>parent[j])
	{
		parent[i]=j;                  //i的结点少//
		parent[j]=x;
	}
	else 
	{
		parent[j]=i;                 //j的结点少//                
		parent[i]=x;
	}
}

int FIND(int i,int parent[])
//查找含有元素i的树根,使用压缩规则去压缩由i到根j的所有结点//
{
	int j,k,t;
	j=i;
	while(parent[j]>0)              //找根//
		j=parent[j];
	k=i;
	while(k!=j)                     //压缩由i到根j的结点  
	{
		t=parent[k];
		parent[k]=j;
		k=t;
	}
	return(j);
}

void FJS(int D[],int n,int J[],int F[])
//找最优解J(1:k)//
//假定p1>=p2>=...>=pn//
{
	int e,t,l,i,j;
	int k;
	int parent[256];
	for(e=0;e<=n;e++)
	{
		parent[e]=-1;
	}
	k=0;                           //初始化J//
	for(i=1;i<=n;i++)
	{
		t=(n<=D[i])?n:D[i];        //使用贪心原则// 
		j=FIND(t,parent);
		if(F[j]!=0) 
		{
			k++;
			J[k]=i;                //选择作业i//
			l=FIND(F[j]-1,parent);
			UNION(l,j,parent);
			F[j]=F[l];
		}
	}
}

void main()
{
	int J[256];                      //J[k]存放作业 
	int D[256];                      //D[k]为截止期限 
	int p[256];                      //P[k]为效益值 
	int F[256];                      //对每个期限值i,当前最接近的空时间片为F[i]
	int e;
	int n;
	printf("***************更快的作业排序算法FJS**************\n");
	printf("*****(假设作业已经按效益p的非递减排过序)**********\n");
	printf("****(所以为保证正确的结果请按p非增序输入作业)*****\n");
	printf("请输入作业的个数:");
	scanf("%d",&n);
	while(n<=0)
	{  
		printf("输入错误,请输入一个正整数:");
		scanf("%d",&n);
	} 
  
	for(e=0;e<=n;e++)
	{
		F[e]=e;
	}
	for(e=1;e<=n;e++)
	{
		J[e]=-1;
	}
	for(e=0;e<n;e++)
	{
		printf("请依次输入作业在截止期限前完成可以得到的最大效益:");
		scanf("%d",&p[e]);
	}
	for(e=1;e<=n;e++)
	{
		printf("请依次输入作业的截止期限:");
		scanf("%d",&D[e]);
		while(D[e]<=0)
		{  
			printf("输入错误,请输入一个正整数:");
			scanf("%d",&D[e]);
		} 
	}
	FJS(D,n,J,F);
	printf("更快的作业排序算法FJS求解得到的最优解为:\n");
	for(e=1;e<=n&&J[e]!=-1;e++)
		printf("%-4d",J[e]);
}
   




 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -